Cod sursa(job #1167279)

Utilizator Darius15Darius Pop Darius15 Data 4 aprilie 2014 18:52:15
Problema Ubuntzei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>

using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
long long i,k,z,best[205][205],b[12],m,x,y,v[12],n,l,j,dist[205][205];
bool viz[12];
long long MINI=1<<30-1;
void bt(int i)
{
    long long s;
    int j;
    if (i==k+1)
    {
        s=best[1][b[1]]+best[b[k]][n];
        for (j=2;j<=k;j++)
        s+=best[b[j-1]][b[j]];
        if (s<MINI) MINI=s;
    }
    else
    for (j=1;j<=k;j++)
    if (viz[j]==false) b[i]=v[j],viz[j]=true,bt(i+1),viz[j]=false;
}
int main()
{
    f>>n>>m;
    f>>k;
    for (i=1;i<=k;i++)
    f>>v[i];
    for (i=1;i<=n;i++)
        for (j=1;j<=n;j++)
        dist[i][j]=best[i][j]=1<<30-1;
    for (i=1;i<=m;i++)
    f>>x>>y>>z,best[x][y]=best[y][x]=dist[y][x]=dist[x][y]=z;
    for (i=1;i<=n;i++)
    best[i][i]=0;
    for (z=1;z<=n;z++)
        for (i=1;i<=n;i++)
            for (j=1;j<=n;j++)
            best[i][j]=min(best[i][j],dist[i][z]+dist[z][j]);
    for (i=1;i<=n;i++)
        best[i][i]=1<<31-1;
        bt(1);
        g<<MINI;
    return 0;
}