Pagini recente » Cod sursa (job #1116022) | Cod sursa (job #3216480) | Cod sursa (job #950183) | Cod sursa (job #924159) | Cod sursa (job #1111428)
#include<fstream>
#include<iostream>
#include<algorithm>
#define INF 500000;
using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
int N,M,a[2005][2005],K,viz[20],nr[20],st,dr,perm[20];
long long prod;
void citire()
{
int i,d,b,c,j;
f>>N>>M;
f>>K;
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++) if(i!=j) a[i][j]=INF;
}
for(i=1;i<=K;i++) f>>nr[i];
for(i=1;i<=M;i++)
{
f>>d>>b>>c;
a[d][b]=c;
a[b][d]=c;
}
}
void RF()
{
int i,j,z;
for(z=1;z<=N;z++)
{
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
{
if(i!=j&&i!=z&&j!=z)
{
if(a[i][z]+a[z][j]<a[i][j]) a[i][j]=a[i][z]+a[z][j];
}
}
}
}
}
int main()
{
int i,j,OK,minim,v,S;
citire();
RF();
st=1;
dr=0;
OK=0;
prod=1;
minim=99999999;
for(i=1;i<=K;i++) perm[i]=i,prod=prod*i;
for(i=1;i<=prod;i++)
{ S=0; st=1; dr=perm[1];
for(j=1;j<=K;j++)
{
S=S+a[st][nr[perm[j]]];
st=nr[perm[j]];
}
S=S+a[st][N];
if(S<minim) minim=S;
next_permutation(perm+1,perm+K+1);
}
g<<minim;
f.close();
g.close();
return 0;
}