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 }
时间: 2024-11-05 12:31:52

HDU 1874 SPFA/BellmanFord/Dijkstra/Floyd的相关文章

hdu 1874 畅通工程续(Floyd算法)

题目链接:hdu-1874 畅通工程续 畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 37414 Accepted Submission(s): 13812 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择

HDU - 2544 - 最短路 (最基础单源最短路问题!!dijkstra+floyd+SPFA)

最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 34617    Accepted Submission(s): 15001 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找

【floyd】HDU 1874 畅通工程续

之后的题解偏重实用/总结性质,尽量理解算法本身而不是题,时间复杂度什么的也可以放放. 很久之前做过这个题,当时使用dijkstra做的,关于几个最短路算法,分类的话可以分为以下几种. 1.单源最短路:已知起点(终点),计算从源点到其他各个顶点的最短路径长度. 典型算法:Dijkstra,Bellman-Ford(可以算负的,比较慢),spfa(负权能用,加了松弛操作,速度比较炸天) 2.全局最短路:从一点到另一点,典型如Floyd,A*启发式算法. 重新用floyd写一遍: #include <

ACM-最短路(SPFA,Dijkstra,Floyd)之最短路——hdu2544

***************************************转载请注明出处:http://blog.csdn.net/lttree*************************************** 最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 28761    Accepted Submissio

hdu 1874(Dijkstra )

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 27692    Accepted Submission(s): 10019 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路

HDU 2544:最短路( 最短路径入门 &amp;&amp;Dijkstra &amp;&amp; floyd )

最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 30972    Accepted Submission(s): 13345 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找

ACM: HDU 1874 畅通工程续-Dijkstra算法

HDU 1874 畅通工程续 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让行人很困扰. 现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离. Input 本题目包含多

【裸单源最短路:Dijkstra算法两种版本】hdu 1874 畅通工程续

Source : hdu 1874 畅通工程续 http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让行人很困扰. 现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离. Input 本题目包含多组数据,请处理到文件结束.

hdu 2544 hdu 1874 Dijkstra 模板题

hdu 2544  求点1到点n的最短路 Sample Input2 1 //结点数 边数1 2 3 //u v w3 31 2 52 3 53 1 20 0 Sample Output32 1 # include <iostream> 2 # include <cstdio> 3 # include <cstring> 4 # include <algorithm> 5 # include <cmath> 6 # define LL long