HDOJ-1874(最短路)

来源:互联网 发布:怎么来淘宝店铺 编辑:程序博客网 时间:2024/04/30 05:29

裸的SPFA:

#include <cstdio>#include <vector>#include <queue>using namespace std;#define INF     999999999struct Edge{    int to, len;    Edge(int t, int l): to(t), len(l){}};int N, M, S, T;vector<Edge> vertex[200];int  dis[200];bool inq[200];bool input(){    if(2 != scanf("%d %d", &N, &M)) return false;        int i, x, y, c;    for(i = 0; i < N; ++i){        vertex[i].clear();        inq[i] = false;        dis[i] = INF;    }    for(i = 0; i < M; ++i){        scanf("%d %d %d", &x, &y, &c);        vertex[x].push_back(Edge(y, c));        vertex[y].push_back(Edge(x, c));    }    scanf("%d %d", &S, &T);    return true;}int spfa(){    if(S == T) return 0;    queue<int> q;    q.push(S);    inq[S] = true;    dis[S] = 0;    while(!q.empty()){        int x = q.front(); q.pop();        const vector<Edge>& v = vertex[x];        for(int i = 0, n = v.size(); i < n; ++i){            int y = v[i].to, l = v[i].len;            if(dis[y] > dis[x] + l){                dis[y] = dis[x] + l;                if(!inq[y]){                    q.push(y);                    inq[y] = true;                }            }        }        inq[x] = false;    }    return dis[T] != INF ? dis[T] : -1;}int main(){    while(input()) printf("%d\n", spfa());    return 0;}


0 0
原创粉丝点击