Pagini recente » Cod sursa (job #289709) | Cod sursa (job #1220681) | Cod sursa (job #1759750) | Cod sursa (job #2333375) | Cod sursa (job #1121686)
#include <fstream>
#include<algorithm>
#define NMAX 999999999;
using namespace std;
ifstream fin("ubuntzei.in");
ofstream fout("ubuntzei.out");
int a[2001][2001],n,m,l,loc[16],s;
void initializare()
{
int i,j;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
a[i][j]=NMAX;
for(i=1;i<=n; i++)a[i][i]=0;
}
int main()
{
int i,j,k,x,y,c,mini,q,z[16];
fin>>n>>m>>l;
for(i=1; i<=l; i++)fin>>loc[i];
initializare();
for(i=1; i<=m; i++)
{
fin>>x>>y>>c;
a[x][y]=c;a[y][x]=c;
}
for(k=1;k<=n; k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(a[i][j]>a[i][k]+a[k][j])
a[i][j]=a[i][k]+a[k][j];
sort(loc+1,loc+l+1);
loc[0]=1;loc[l+1]=n;
mini=NMAX;
for(i=0; i<=l+1; i++) z[i]=i;
do{
s=0;
for(i=1; i<=l+1; i++)
s+=a[loc[z[i-1]]][loc[z[i]]];
if(s<mini)mini=s;
}while(next_permutation(z+1,z+l+1));
fout<<mini;
return 0;
}