Pagini recente » Cod sursa (job #1233698) | Cod sursa (job #2904844) | Cod sursa (job #1544773) | Cod sursa (job #770262) | Cod sursa (job #671948)
Cod sursa(job #671948)
#include <iostream>
#include <fstream>
#include <limits>
using namespace std;
ofstream fout("ubuntzei.out");
int fr[16],v[16],a[2001][2001],n,m,k,d[2001],coada[2001],viz[2001],sol[16],smin=INT_MAX;
void afis()
{
int s=0;
for(int i=0;i<k;i++)
s+=a[sol[i]][sol[i+1]];
s+=a[sol[k]][n];
if(s<smin) smin=s;
}
void init()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i==j) a[i][j]=0;
else a[i][j]=1000000001;
}
void citire()
{
freopen ("ubuntzei.in","r",stdin);
scanf("%d%d%d", &n,&m,&k);
for(int i=1;i<=k;i++)
scanf("%d",&v[i]);
init();
for(int i=1;i<=m;i++)
{
int x,y,s;
scanf("%d%d%d",&x,&y,&s);
a[x][y]=a[y][x]=s;
}
}
/*int dijktra(int x,int y)
{
coada[1]=x;
viz[x]=1;
int dr=1,s=1;
do{
for(int i=1;i<=n;i++)
if(a[coada[s]][i]!=0 && d[i]==0 && viz[i]==0)
{
viz[i]=1;
d[i]=d[coada[s]]+a[coada[s]][i];
coada[++dr]=i;
}
else if(a[coada[s]][i]!=0 && d[coada[s]]+a[coada[s]][i]<d[i])
d[i]=d[coada[s]]+a[coada[s]][i];
s+=1;
}while(s<=dr);
return d[y];
}*/
void fw()
{
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(a[i][k]+a[k][j]<a[i][j])
a[i][j]=a[i][k]+a[k][j];
}
void back(int k2)
{
if(k2>k) afis();
else
for(int i=1;i<=k;i++)
if(fr[v[i]]==0)
{
sol[k2]=v[i];
fr[v[i]]=1;
back(k2+1);
fr[v[i]]=0;
}
}
int main()
{
citire();
fw();
sol[0]=1;
back(1);
fout<<smin<<" ";
return 0;
}