Pagini recente » Cod sursa (job #1415177) | Cod sursa (job #2482902) | Cod sursa (job #39669) | Cod sursa (job #3151945) | Cod sursa (job #1888713)
#include <fstream>
#include <string.h>
#define pinfinit 4000
#define dim 3000
using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
short int i,n,d[dim],a[dim][dim],s[dim],min1,j,poz,loc[dim],x,y,z,m,k;
short int t[dim];
void citire()
{
f>>n>>m>>k;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=pinfinit;
for(i=1;i<=k;i++)
f>>loc[i];
for(i=1;i<=m;i++)
{
f>>x>>y>>z;
a[x][y]=a[y][x]=z;
}
}
int dijkstra(int r,int r1)
{
memset(s,0,sizeof s);
memset(d,0,sizeof d);
s[r]=1;
for(i=1;i<=n;i++)
{
d[i]=a[r][i];
if(i!=r)
if(d[i]<pinfinit)
t[i]=r;
}
for(i=1;i<=n-1;i++)
{
min1=pinfinit;
for(j=1;j<=n;j++)
if(s[j]==0)
if(d[j]<min1)
{
min1=d[j];
poz=j;
}
s[poz]=1;
for(j=1;j<=n;j++)
if(s[j]==0)
if(d[j]>d[poz]+a[poz][j])
{
d[j]=d[poz]+a[poz][j];
t[j]=poz;
}
}
return d[r1];
}
int main()
{
citire();
int sum=0;
loc[0]=1;
loc[k+1]=n;
for(int h=1;h<=k+1;h++)
sum+=dijkstra(loc[h-1],loc[h]);
g<<sum;
return 0;
}