Pagini recente » Cod sursa (job #444700) | Cod sursa (job #2688933) | Cod sursa (job #1553315) | Cod sursa (job #2360631) | Cod sursa (job #697070)
Cod sursa(job #697070)
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> ck(16);
int mat[2001][2001];
FILE *f,*g;
int main()
{
f=fopen("ubuntzei.in","r");
g=fopen("ubuntzei.out","w");
int n,m,ka,a,b,c;
fscanf(f,"%d%d%d",&n,&m,&ka);
register int i,j,k;
for(i=0;i<ka;++i)
fscanf(f,"%d",&ck[i]);
ck.resize(ka);
for(i=0;i<m;i++)
{
fscanf(f,"%d%d%d",&a,&b,&c);
mat[a][b]=c;
mat[b][a]=c;
}
for(k=1;k<=n;++k)
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
if(mat[i][k]!=0 && mat[k][j]!=0 && ( mat[i][j]>mat[i][k]+mat[k][j] || mat[i][j]==0) && i!=j)
mat[i][j]=mat[i][k]+mat[k][j];
int min=999999999,sum=0;
if(ka>0)
{
sort(ck.begin(),ck.end());
do
{
sum=mat[1][ck[0]]+mat[ck[ka-1]][n];
for(i=0;i<ka-1;++i)
{
sum+=mat[ck[i]][ck[i+1]];
}
if(sum<min && sum!=0)
min=sum;
}while( next_permutation( ck.begin(),ck.end() ) );
}
else min=mat[1][n];
fprintf(g,"%d",min);
fclose(f);
fclose(g);
return 0;
}