HDU2544 最短路

来源:互联网 发布:正规淘宝刷平台官网 编辑:程序博客网 时间:2024/06/06 20:38

最短路

题目传送门

最近老是spfa打错,拿这道题练练手。
全裸最短路哦~

AC代码:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct edge{    int next;    int to;    int dis;};int n,m,u,v,d,s,t,k;int h[105],dis[105];edge a[20005];bool f[105];int spfa(){    memset(dis,0x7f,sizeof(dis));    int b[100000];    int r=0,w=1;    dis[1]=0; b[1]=1; f[1]=true;    while (r<w){        int x=b[++r];        f[x]=false;        for (int i=h[x];i;i=a[i].next)            if (dis[a[i].to]>dis[x]+a[i].dis){                dis[a[i].to]=dis[x]+a[i].dis;                if (!f[a[i].to]){                    b[++w]=a[i].to;                    f[a[i].to]=true;                }            }    }    return dis[n];}void read(int x,int y,int z){    k++;    a[k].next=h[x];    a[k].to=y;    a[k].dis=z;    h[x]=k;}int main(){    while (scanf("%d%d",&n,&m)!=EOF){        if (n==0&&m==0) continue;        memset(f,false,sizeof(f));        memset(h,0,sizeof(h));        k=0;        for (int i=1;i<=m;i++){            scanf("%d%d%d",&u,&v,&d);            read(u,v,d);            read(v,u,d);        }        //scanf("%d%d",&s,&t);        printf("%d\n",spfa());    }    return 0;}