Pagini recente » Cod sursa (job #2046671) | Cod sursa (job #1482141) | Cod sursa (job #1376547) | Cod sursa (job #2283378) | Cod sursa (job #1647422)
#include <bits/stdc++.h>
#define INF 1000000000
using namespace std;
int n,m,K,a[2003][2003],st[20],v[20],sol,t[20];
inline void Citire()
{
int i,j,x,y,z;
ifstream fin("ubuntzei.in");
fin>>n>>m;
fin>>K;
for(i=1;i<=K;++i)
fin>>t[i];
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
if(i!=j)
a[i][j]=INF;
for(i=1;i<=m;++i)
{
fin>>x>>y>>z;
if(x!=y)
a[x][y]=a[y][x]=z;
}
fin.close();
}
inline void Dinamica()
{
int i,j,k;
for(k=1;k<=n;++k)
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
a[i][j]=min(a[i][j],a[i][k] + a[k][j]);
}
inline void Calculeaza()
{
int i,s,x,ant;
s=0;
ant=1;
for(i=1;i<=K;++i)
{
x=t[st[i]];
s+=a[ant][x];
ant=x;
}
s+=a[ant][n];
sol=min(sol,s);
}
inline void Back(int k)
{
int i;
if(k==K+1)
Calculeaza();
else
for(i=1;i<=K;++i)
if(v[i]==0)
{
st[k]=i;
v[i]=1;
Back(k+1);
v[i]=0;
}
}
int main()
{
Citire();
Dinamica();
sol=INF;
Back(1);
ofstream fout("ubuntzei.out");
fout<<sol<<"\n";
fout.close();
return 0;
}