Pagini recente » Cod sursa (job #1664584) | Cod sursa (job #41138) | Cod sursa (job #2591657) | Cod sursa (job #98643) | Cod sursa (job #2338519)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#define nmax 2005
using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
int n,m, k, a[nmax][nmax];
vector <int> c;
void citire()
{
int i,j,x,y,cs;
f>>n>>m;
f>>k;
c.push_back(1);
for(i=1; i<=k; i++)
{
f>>x; c.push_back(x);
}
c.push_back(n);
for(i=1; i<=m; i++)
{
f>>x>>y>>cs;
a[x][y]=cs; a[y][x]=cs;
}
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if(i!=j && a[i][j]==0)
a[i][j]=1e9;
}
void afis()
{
int i,j;
for(i=1; i<=n; i++)
{for(j=1; j<=n; j++)
cout<<a[i][j]<<" ";
cout<<"\n";}
}
int main()
{
citire();
int i,j,k, nod, cst;
for(k=1; k<=n; k++)
for(i=1; i<=n; i++)
for(j=1; j<n; j++)
{
if(a[i][j]>a[k][j]+a[i][k])
{
a[i][j]=a[k][j]+a[i][k];
a[j][i]=a[k][j]+a[i][k];
}
}
int mn=1e9, dist;
do
{
dist=0;
for(i=1; i<=c.size(); i++)
dist+=a[c[i-1]][c[i]];
if(mn>dist)
mn=dist;
}while(next_permutation(c.begin()+1, c.end()-1));
g<<mn<<" ";
f.close();
g.close();
return 0;
}