Pagini recente » Cod sursa (job #405346) | Cod sursa (job #1593151) | Cod sursa (job #1980041) | Cod sursa (job #1233353) | Cod sursa (job #1366895)
#include <fstream>
#include <algorithm>
#define Nmax 209
#define oo 2000000000
using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
int N,M,S,F,d[Nmax][Nmax],x,y,sol,dr[Nmax],K,c;
int main()
{
f>>N>>M>>K;
for(int i=1;i<=K;i++)
{
f>>dr[i];
}
for(int i=1;i<=M;++i)
{
f>>x>>y>>c;
d[x][y]=d[y][x]=c;
}
for (int k=1; k<=N; k++)
for (int i=1; i<=N; i++)
for (int j=1; j<=N; j++)
if (i!=j && d[i][k]>0 && d[k][j]>0 && (d[i][j]==0 || d[i][k]+d[k][j]<d[i][j]))
{
d[i][j] = d[i][k]+d[k][j];
}
sort(dr+1, dr+1+K);
sol = oo;
do {
int sol_partial=0;
dr[0]=1;
dr[K+1]=N;
for (int i=0; i<=K; i++)
sol_partial = sol_partial + d[dr[i]][dr[i+1]];
if (sol_partial<sol) sol=sol_partial;
}while(next_permutation(dr+1, dr+1+K));
g<<sol<<'\n';
f.close();g.close();
return 0;
}