POJ_2387_Til the Cows Come Home(USACO 2004 November)_最短路径

来源:互联网 发布:ubuntu键盘键值出错 编辑:程序博客网 时间:2024/05/21 08:47

这是最简单的最短路径裸题之一…建议初学者做或者用来测速…

题目的意思是给一个有 T 条双向边、N 个点的图,问从1号结点到 N 号结点最短路径长度…赤果果的一道题…

用SPFA解决:

#include<iostream>#include<cstdio>#include<queue>#include<vector>#include<cstring>using namespace std;const int N =1050;int t,n;vector <int> E[N],W[N];int d[N];bool vd[N];void spfa(int s){    memset(d,0x7f,sizeof(d));    memset(vd,false,sizeof(vd));    queue <int> q;    q.push(s);    vd[s]=true;    d[s]=0;    while (q.size())    {        int u=q.front();        vd[u]=false;        q.pop();        for (int i=0;i<E[u].size();i++)        {            int v=E[u][i];            int w=W[u][i];            if (d[u]+w<d[v])            {                d[v]=w+d[u];                if (vd[v]==false)                {                    q.push(v);                    vd[v]=true;                }            }        }    }}int main(){    int a,b,c;    scanf ("%d%d",&t,&n);    for (int i=1;i<=t;i++)    {        scanf ("%d%d%d",&a,&b,&c);//储存为双向边        E[a].push_back(b);        E[b].push_back(a);        W[a].push_back(c);        W[b].push_back(c);    }    spfa (1);    printf ("%d\n",d[n]);    return 0;}
0 0
原创粉丝点击