Pagini recente » Cod sursa (job #2868199) | Cod sursa (job #2641154) | Cod sursa (job #1538700) | Cod sursa (job #1535222) | Cod sursa (job #1121681)
#include<fstream>
#include<algorithm>
#define INF 99999999
#define N 2001
#define K 16
using namespace std;
ifstream fin("ubuntzei.in");
ofstream fout("ubuntzei.out");
long long n,m,k,a[N][N],oras[K],luat[K],sol[K];
void royfloyd()
{
for(int k=1;k<=n;k++)
for(int i=1;i<n;i++)
for(int j=i+1;j<=n;j++)
{a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
a[j][i]=a[i][j];}
}
int cmin=INF;
void verifica()
{
int i,cost=0;
for(i=1;i<=k+1;i++)
cost+=a[oras[sol[i]]][oras[sol[i-1]]];
cmin=min(cmin,cost);
}
/*void gen(int p)
{
if(p>k)
verifica();
else
for(int i=1;i<=k;i++)
if(!luat[i])
{
sol[p]=i;
luat[i]=1;
gen(p+1);
luat[i]=0;
}
}*/
int main()
{
fin>>n>>m;
int i,j,x,y,c;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
a[i][j]=a[j][i]=INF;
fin>>k;
for(i=1;i<=k;i++)
{fin>>oras[i];sol[i]=i;}
for(i=1;i<=m;i++)
{fin>>x>>y>>c;
a[x][y]=a[y][x]=c;}
royfloyd();
oras[0]=1;
oras[k+1]=n;
sol[0]=0;sol[k+1]=k+1;
verifica();
while(next_permutation(sol+1,sol+k+1))
verifica();
fout<<cmin;
return 0;
}