Pagini recente » Cod sursa (job #2856141) | Cod sursa (job #1369618) | Cod sursa (job #2870179) | Cod sursa (job #1839442) | Cod sursa (job #698279)
Cod sursa(job #698279)
#include<fstream>
#include<iostream>
using namespace std;
void csere (int p[100], int i, int j)
{
int s;
s=p[i];
p[i]=p[j];
p[j]=s;
}
int main()
{
int t[500][500]={0},i,j,k,n,m,a,b,x,c,p[100],s=0,min=1000;
for(i=0;i<500;i++)
for(j=0;j<500;j++)
if(i!=j) t[i][j]=1000;
fstream f,g;
f.open("ubuntzei.in",ios::in);
f>>n>>m>>x;
for(i=1;i<=x;i++)
f>>p[i];
for(i=1;i<=m;i++)
{
f>>a;
f>>b;
f>>c;
t[a][b]=c;
t[b][a]=c;
}
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if((t[i][j]>t[i][k]+t[k][j])&&(t[i][k]!=0)&&(t[k][j]!=0))
t[i][j]=t[i][k]+t[k][j];
if(x>0)
{
for(i=1;i<=x;i++)
for(j=1;j<=x;j++)
{
if(i!=j) csere (p,i,j);
s=s+t[1][p[1]];
for (i=1;i<x;i++)
{
s=s+t[p[i]][p[i+1]];
}
s=s+t[p[i]][n];
if(s<min) min=s;
if (i!=j) csere (p,i,j);
}
}
else s=t[1][n];
g.open("ubuntzei.out",ios::out);
g<<min;
}