Pagini recente » Borderou de evaluare (job #1796680) | Borderou de evaluare (job #1721925) | Borderou de evaluare (job #2049811) | Borderou de evaluare (job #1262188) | Cod sursa (job #701777)
Cod sursa(job #701777)
#include<iostream>
#include<fstream>
using namespace std;
int v[100],loc[100],a[1000][1000],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;
while(f>>i>>j>>c)
a[i][j]=c,a[j][i]=c;
}
int main()
{
citire();
roy_floyd();
perm(1);
ofstream g("ubuntzei.out");
g<<d_min;
}