Pagini recente » Cod sursa (job #1572497) | Cod sursa (job #2102011) | Electron_A | Cod sursa (job #1186763) | Cod sursa (job #1117712)
#include<iostream>
using namespace std;
#include<stdio.h>
FILE *f,*g;
int n,m,a[2001][2001],i,j,k,z[2001],x,y,d,sol[2001],minim=9999;
int valid(int f)
{
for(i=1;i<f;i++)
if(sol[i]==sol[f])
return 0;
return 1;
}
int back(int f)
{
if(f==k+1)
{int suma=0;
suma=suma+a[1][z[sol[1]]];
for(i=1;i<k;i++)
suma=suma+a[z[sol[i]]][z[sol[i+1]]];
suma=suma+a[z[sol[k]]][n];
if(suma<minim)
minim=suma;
}
else
{
sol[f]=0;
while(sol[f]<k)
{
sol[f]++;
if(valid(f))
back(f+1);
}
}
}
int drum()
{
int t=0;
for(t=1;t<=n;t++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(a[i][j]>a[i][t]+a[t][j])
a[i][j]=a[i][t]+a[t][j];
}
int main()
{
f=fopen("ubuntzei.in","r");
g=fopen("ubuntzei.out","w");
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i==j)
a[i][j]=0;
else
a[i][j]=3200;
fscanf(f,"%d",&k);
for(i=1;i<=k;i++)
fscanf(f,"%d",&z[i]);
for(i=1;i<=m;i++)
{
fscanf(f,"%d%d%d",&x,&y,&d);
a[x][y]=d;
a[y][x]=d;
}
drum();
back(1);
fprintf(g,"%d",minim);
}