HDU 1874 SPFA/BellmanFord/Dijkstra/Floyd

Posted ( m Lweleth)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 1874 SPFA/BellmanFord/Dijkstra/Floyd相关的知识,希望对你有一定的参考价值。

这题作为模板题,解法好多...

最近周围的人都在搞图论阿,感觉我好辣鸡,只会跟风学习。

暂时只有SPFA的

SPFA (邻接表版。也可以写成临接矩阵存图,但题目可能给出平行边的,所以要注意找最小的边储存,还要注意判断一个点是否多次进入队列)老实说觉得SPFA好像只是被队列优化过的搜索一样的..

 1 #include <stdio.h>
 2 #include <algorithm>
 3 #include <iostream>
 4 #include <string.h>
 5 #include <utility>
 6 #include <vector>
 7 #include <queue>
 8 #define MAXX 10010
 9 using namespace std;
10 
11 const int N = 250;
12 const int INF = 0x3f3f3f3f;
13 
14 
15 typedef struct sion
16 {
17     int dis;
18     int nxp;
19 }sion;
20 
21 int dic[N];
22 bool vis[N];
23 vector<sion>li[N];
24 
25 
26 int spfa(int &s, int &t)
27 {
28     queue<int>q;
29     q.push(s);
30     vis[s] = 1;
31     dic[s] = 0;
32     while(!q.empty())
33     {
34         int pre = q.front();
35         q.pop();
36         for(int i = 0; i < li[pre].size(); i++)
37         {
38            // cout << dic[li[pre][i].nxp] << "~";
39             if(dic[li[pre][i].nxp] > dic[pre] + li[pre][i].dis)
40             {
41                 dic[li[pre][i].nxp] = dic[pre] + li[pre][i].dis;
42                     q.push(li[pre][i].nxp);
43                    // cout << dic[li[pre][i].nxp] << "!";
44             }
45         }
46 
47     }
48     return dic[t];
49 }
50 
51 void init()
52 {
53     memset(vis,false,sizeof(vis));
54     memset(dic,INF,sizeof(dic));
55     for(int i = 0; i < N; i++)
56         li[i].clear();
57     return ;
58 }
59 
60 int main()
61 {
62     int n, m;
63     int s, t;
64     while(cin >> n >> m)
65     {
66         init();
67         sion a;
68         int x;
69         for(int i = 0; i < m; i++)
70         {
71             scanf("%d%d%d",&x, &a.nxp, &a.dis);
72             li[x].push_back(a);
73             int temp = a.nxp;
74             a.nxp = x;
75             li[temp].push_back(a);
76         }
77         scanf("%d%d", &s, &t);
78         int y = spfa(s, t);
79         if(y >= INF)
80         {
81             printf("-1\n");
82         }
83         else printf("%d\n", y);
84     }
85 }

 

以上是关于HDU 1874 SPFA/BellmanFord/Dijkstra/Floyd的主要内容,如果未能解决你的问题,请参考以下文章

HDU 1874 畅通工程续

所有的畅通工程[HDU1232][HDU1874][HDU1875][HDU1879]

HDU 1874 畅通工程续

HDU 1874 畅通工程续

hdu-1874 题解

hdu 1874