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;
}

 

posted @ 2012-05-18 22:43  'wind  阅读(211)  评论(0)    收藏  举报