HDOJ1874最短路【spfa】

尴尬

//不知道切过这道题目几次了,这次又wa了...双向路啊。。。。这波简直无奈了,今晚又是浪成狗!!!!

#include<cstdio>
#include<vector>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF 0X3f3f3f3f
#define N 100010




struct asd{
    int to;
    int w;
    int next;
};
int head[N];
int tol;
asd q[N];
int dis[220];
bool vis[220];
int n;
int que[N*10];
void spfa(int s,int t)
{
    for(int i=0;i<n;i++)
    {
        dis[i]=INF;
        vis[i]=0;
    }
    dis[s]=0;
    vis[s]=1;
    int he,tail;
    he=0;tail=1;
    que[he]=s;
    while(he<tail)
    {
        int u=que[he];
        vis[u]=0;
        for(int k=head[u];k!=-1;k=q[k].next)
        {
            int i=q[k].to;
            if(dis[i]>dis[u]+q[k].w)
            {
                dis[i]=dis[u]+q[k].w;
                if(!vis[i])
                {
                    que[tail++]=i;
                    vis[i]=1;
                }
            }
        }
        he++;
    }
    if(dis[t]!=INF)
    {
        printf("%d
",dis[t]);
    }
    else
        puts("-1");
}




void add(int a,int b,int c)
{
    q[tol].to=b;
    q[tol].w=c;
    q[tol].next=head[a];
    head[a]=tol++;
}




int main()
{
    int m;
    while(~scanf("%d%d",&n,&m))
    {
        int a,b,c;
        memset(head,-1,sizeof(head));
        tol=0;
        for(int i=0;i<m;i++)
        {
            scanf("%d%d%d",&a,&b,&c);
            add(a,b,c);
            add(b,a,c);
        }




        int s,t;
        scanf("%d%d",&s,&t);
        spfa(s,t);
    }
    return 0;
}




原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934589.html