Pagini recente » Cod sursa (job #2935693) | Cod sursa (job #2132512) | Cod sursa (job #2754960) | Cod sursa (job #1877357) | Cod sursa (job #868446)
Cod sursa(job #868446)
#include<fstream>
#define dim 205
using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
int A[dim][dim];
int i,j,k,K,a,b,c,n,m,MIN;
int v[dim],x[dim],bb[dim];
void back(int k,int len){
if(k-1==len) {
int ans=0;
ans=A[1][x[1]];
for(int i=1;i<len;i++){
ans+=A[x[i]][x[i+1]];
}
ans+=A[x[len]][n];
if(ans<=MIN)
MIN=ans;
return ;
}
for(int i = 1; i <= len; i++)
if(!bb[i]) {
x[k] = v[i];
bb[i] = 1;
back(k+1,len);
bb[i] = 0;
}
}
int main () {
f>>n>>m;
f>>K;
for(i=1;i<=K;++i)
f>>v[i];
for(i=1;i<=m;++i){
f>>a>>b>>c;
A[a][b]=A[b][a]=c;
}
MIN=100000;
for(k=1;k<=n;++k){
for(i=1;i<=n;++i) {
for(j=1;j<=n;++j){
if(i!=j && A[i][k] && A[k][j]) {
if(!A[i][j] || A[i][j]>A[i][k]+A[k][j])
A[i][j]=A[i][k]+A[k][j];
}
}
}
}
back(1,K);
g<<MIN<<"\n";
return 0;
}