poj 2387 最短路 spfa 实现

来源:互联网 发布:python百度地图 编辑:程序博客网 时间:2024/06/18 15:24

http://poj.org/problem?id=2387

题目大意就是求最短路,从n到1的最短路。就用来熟悉一下spfa的写法。

一开始贡献了好几次wa,结果发现是因为n,m写反了。。。。

没有什么拐弯的地方,来熟悉spfa直接附上代码:

#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <vector>using namespace std;#define M 2009#define INF 0x3f3f3f3fstruct edge{    int to,w;};bool inq[M];vector <edge> g[M];int dis[M];int n,m;void spfa(int s){    for(int i = 1;i <= n;i++)    {        dis[i] = INF;        inq[i] = false;    }    dis[s] = 0;    queue<int> q;    q.push(s);    inq[s] = true;    while(!q.empty())    {        s = q.front();        inq[s] = false;        q.pop();        for(int i = 0;i < g[s].size();i++)        {            int v = g[s][i].to;            int w = g[s][i].w;            if(dis[v] > dis[s]+w)            {                dis[v] = dis[s]+w;                if(!inq[v])                {                    inq[v] = true;                    q.push(v);                }            }        }    }}int main(){    while(scanf("%d %d",&m,&n)==2)  //m n写反了···· 贡献好几次WA    {        for(int i = 1;i <= n;i++)            g[i].clear();        for(int i = 0;i < m;i++)        {            int a,b,c;            scanf("%d %d %d",&a,&b,&c);            edge e;            e.to = b;e.w = c;            g[a].push_back(e);            e.to = a;            g[b].push_back(e);  //无向图 变化成双向的。        }        spfa(n);        printf("%d\n",dis[1]);    }    return 0;}


0 0
原创粉丝点击