HDU 2544 最短路【SPFA + SLF】
题意: 求单源最短路,起点为1,终点为 n .
分析: SPFA 加了点优化。。。
View Code
#include<stdio.h> #include<string.h> #define INF 0x1f1f1f int n; int v[102],dis[102],g[102][102],q[102]; void spfa() { int rear,front,i,x; memset(v,0,sizeof(v)); front=rear=0; q[rear++]=1; dis[1]=0; v[1]=1; while(front<rear) { x=q[front++]; v[x]=0; for(i=1;i<=n;i++) if(dis[i]>dis[x]+g[x][i]) { dis[i]=dis[x]+g[x][i]; if(!v[i]) { v[i]=1; if(dis[i]<=dis[x]&&front>0) q[--front]=i; else q[rear++]=i; } } } } int main() { int m,a,b,w; while(scanf("%d%d",&n,&m),n||m) { memset(dis,INF,sizeof(dis)); memset(g,INF,sizeof(g)); while(m--) { scanf("%d%d%d",&a,&b,&w); g[a][b]=g[b][a]=w; } spfa(); printf("%d\n",dis[n]); } return 0; }



浙公网安备 33010602011771号