Pagini recente » Cod sursa (job #2765746) | Cod sursa (job #2025025) | Cod sursa (job #737054) | Cod sursa (job #1122792) | Cod sursa (job #1070528)
#include <fstream>
#include <algorithm>
#include<vector>
#include<queue>
using namespace std;
int b,componente,i,aux,n,k,j,p,s,unu,t,m,doi,x,q,dr,maxim,maxi2,y,conex,val,cont,a[210][210],cost,sol,st[100],viz[100];
int w[2000];
ifstream fin("ubuntzei.in");
ofstream fout("ubuntzei.out");
void roy_floyd()
{
int i, j, k;
for (k = 1; k <= n; k++)
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
if (a[i][k] && a[k][j] && (a[i][j] > a[i][k] + a[k][j] || !a[i][j]) && i != j) a[i][j] = a[i][k] + a[k][j];
}
void tipar(int x)
{
int j,sum=0;;
for(j=2;j<=x;j++)
{
//fout<<st[j]<<" ";
sum+=a[ w[st[j-1]]][w[st[j]]];
}
sum+=a[1][w[st[1]]];
sum+=a[w[st[x]]][n];
//fout<<"\n";
if(sol>sum)
sol=sum;
}
void back(int vf)
{
int k;
if(vf==aux+1)
{
tipar(aux);
}
for(k=1;k<=aux;k++)
{
if(viz[k]==0){
st[vf]=k;
viz[k]++;
back(vf+1);
viz[k]--;
}
}
}
int main()
{
fin>>n>>m;
fin>>k;
for(i=1;i<=k;i++)
{
fin>>w[i];
}
for(i=1;i<=m;i++)
{
fin>>x>>y>>cost;
// fout<<x<<" "<<y<<" "<<cost<<"\n";
a[x][y]=cost;
a[y][x]=cost;
}
roy_floyd();
aux=k;
//fout<<aux;
sol=100000000;
back(1);
if(k==0)fout<<a[1][n];
else
fout<<sol;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
// fout<<a[i][j]<<" ";
}
//fout<<"\n";
}
}