Pagini recente » Cod sursa (job #2628383) | Cod sursa (job #208208) | Cod sursa (job #1329801) | Cod sursa (job #1506909) | Cod sursa (job #701858)
Cod sursa(job #701858)
#include<iostream>
#include<fstream>
using namespace std;
int v[206],loc[206],a[206][206],n,m,k_oras,d_min=100000000;
#define inf 1000000
void verifica()
{
int s=0;
s+=a[1][loc[1]];
for(int i=1;i<k_oras;i++)
{
s+=a[loc[i]][loc[i+1]];
}
s+=a[loc[k_oras]][n];
if(s<d_min)
d_min=s;
}
void perm(int k)
{
if(k==k_oras+1)
verifica();
else
{
v[k]=loc[k];
for(int i=1;i<=k;i++)
{
int aux=v[i];
v[i]=v[k];
v[k]=aux;
perm(k+ 1);
aux=v[i];
v[i]=v[k];
v[k]=aux;
}
}
}
void roy_floyd()
{
for(int c=1;c<=n;c++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(a[i][c]+a[c][j]<a[i][j])
a[i][j]=a[i][c]+a[c][j];
}
void citire()
{
int i,j,c;
ifstream f("ubuntzei.in");
f>>n>>m;
f>>k_oras;
for(i=1;i<=k_oras;i++)
f>>loc[i];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i!=j)a[i][j]=inf;
else a[i][j]=0;
for(int i=1;i<=m;i++)
{f>>i>>j>>c;
a[i][j]=c,a[j][i]=c;}
}
int main()
{
citire();
roy_floyd();
ofstream g("ubuntzei.out");
if(k_oras>0){
perm(1);
g<<d_min;
}
else
g<<a[1][n];
}