Pagini recente » Cod sursa (job #782203) | Cod sursa (job #2278061) | Cod sursa (job #1308898) | Cod sursa (job #1226730) | Cod sursa (job #1167279)
#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;
}