Pagini recente » Cod sursa (job #2234564) | Cod sursa (job #1055979) | Cod sursa (job #825542) | Cod sursa (job #205992) | Cod sursa (job #1104476)
#include<stdio.h>
#include<vector>
#include<algorithm>
#include<string.h>
using namespace std;
FILE *in,*out;
//definitii
#define pb push_back
//constante
const int Nmax=205;
const int oo=0x3f3f3f3f;
//variabile
int noduri,muchii,loc,x;
vector<int> localitati;
int nod1,nod2,dist;
int cost[Nmax][Nmax];
int distTot,drumMin;
int main(void)
{
in=fopen("ubuntzei.in","rt");
fscanf(in,"%d%d%d",&noduri,&muchii,&loc);
for(int i=0; i<loc; ++i)
{
fscanf(in,"%d",&x);
localitati.pb(x);
}
memset(cost , oo , sizeof(cost));
for(int i=1; i<=noduri; ++i)
cost[i][i]=0;
while(muchii--)
{
fscanf(in,"%d%d%d",&nod1,&nod2,&dist);
cost[nod1][nod2]=cost[nod2][nod1]=dist;
}
fclose(in);
for(int h=1; h<=noduri; ++h)
for(int i=1; i<=noduri; ++i)
{
if(i==h)
continue;
for(int j=1; j<=noduri; ++j)
cost[i][j]=min(cost[i][j],cost[i][h]+cost[h][j]);
}
if(loc>0)
{
sort(localitati.begin(),localitati.end());
drumMin=oo;
do
{
int destTot=cost[1][localitati.front()] + cost[localitati.back()][noduri];
//vector<int> :: iterator it,end=localitati.end()-1;
//for(it=localitati.begin(); it!=end; ++it)
for(int i=0; i< (int) localitati.size()-1; ++i)
destTot+=cost[localitati[i]][localitati[i+1]];
drumMin=min(drumMin,destTot);
}
while(next_permutation(localitati.begin(),localitati.end()));
}
else
fprintf(out,"%d",cost[1][noduri]);
out=fopen("ubuntzei.out","wt");
fprintf(out,"%d",drumMin);
fclose(out);
return 0;
}