#include<iostream>
using namespace std;
int g[1100][1100] = { 0 }, Q[3000] = { 0 }, dist[1100] = { 0 }, vist[3000] = { 0 };
void spfa(int s, int m)
{
int i = 0, k = 0, ts = 0, te = 1;
Q[ts] = s;
dist[s] = 0;
while (ts < te)
{
k = Q[ts];
vist[k] = 0;
for (i = s; i>=1; i--)
{
if (g[k][i]>0 && dist[i] > g[k][i] + dist[k])
{
dist[i] = dist[k] + g[k][i];
if (!vist[i])
{
Q[te++] = i;
vist[i] = 1;
}
}
}
ts++;
}
}
int main()
{
int T = 0, N = 0,i=0,a=0,b=0,len=0;
cin >> T >> N;
for (i = 1; i <= T; i++)
{
cin >> a >> b >> len;
if (g[a][b]==0)
{
g[b][a] = g[a][b] = len;
}
else if (g[a][b]>len)
{
g[b][a]=g[a][b] = len;
}
}
for (i = 0; i < 1100; i++)
{
dist[i] = 999999999;
}
spfa(N, N);
cout << dist[1] << endl;
return 0;
}
poj2387 spfa图
最新推荐文章于 2019-03-23 19:40:11 发布