spfa模板题,用的邻接表写的。
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#define N 150
#define inf 999999
using namespace std;
struct node
{
int from,to,value;
};
queue<int>q;
vector<node>g[N];
int n;
int vis[N],dis[N];
int spfa(int x)
{
int i;
memset(vis,0,sizeof(vis));
for(i=0;i<=n;i++)
dis[i]=inf;
q.push(x);
vis[x]=1;
dis[x]=0;
while(!q.empty())
{
int cur=q.front();
q.pop();
for(i=0;i<g[cur].size();i++)
{
int k=g[cur][i].to;
if(dis[k]>dis[cur]+g[cur][i].value)
{
dis[k]=dis[cur]+g[cur][i].value;
if(!vis[k])
{
vis[k]=1;
q.push(k);
}
}
}
vis[cur]=0;
}
return dis[n];
}
int main()
{
int i,a,b,c,j,m;
while(scanf("%d%d",&n,&m)!=EOF &&n&&m)
{
for(i=0;i<N;i++) g[i].clear();
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
node e;
e.from=a;
e.to=b;
e.value=c;
g[e.from].push_back(e);
e.from=b;
e.to=a;
g[e.from].push_back(e);
}
int max=spfa(1);
printf("%d\n",max);
}
return 0;
}