Pagini recente » Cod sursa (job #2020284) | Cod sursa (job #3264484) | Cod sursa (job #2357688) | Cod sursa (job #397850) | Cod sursa (job #1858018)
#include <iostream>
#include <fstream>
#define infinit 1000000000
using namespace std;
ifstream fin("ubuntzei.in");
ofstream fout("ubuntzei.out");
int d[2001],v[2001],a[2000][2000],n,m,k,x,y,z,vk[15];
void citire()
{
int i;
fin>>n>>m>>k;
for(i=1;i<=k;i++)
fin>>vk[i];
while(fin>>x>>y>>z)
a[x][y]=a[y][x]=z;
}
void creare_mat()
{
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i==j)
a[i][j]=0;
else
a[i][j]=infinit;
}
void roy()
{
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(a[i][j]>a[i][k]+a[k][j])
a[i][j]=a[i][k]+a[k][j];
}
void dijk()
{
int i;
for(i =1 ; i <= n ; i ++ )
{
v[i] = 0;
d[i] = a[1][i];
}
v[1] = 1, d[1] = 0;
d[0] = infinit;
for(int j = 1 ; j < n ; ++j)
{
int pmax = 0;
for(i = 1 ; i <= n ; ++i)
if(v[i] == 0 && d[i] < d[pmax])
pmax = i;
if(pmax > -1)
{
v[pmax] = 1;
for(i = 1; i <= n ; ++i)
if(v[i] == 0 && d[i] > d[pmax] + a[pmax][i])
d[i] = d[pmax] + a[pmax][i];
}
}
}
int main()
{
creare_mat();
citire();
if(k==0)
{
dijk();
fout<<a[1][n];
}
else
{
roy();
}
}