Day4-A-最短路 HDU2544
Input输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。
输入保证至少存在1条商店到赛场的路线。
Output对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间Sample Input
2 1
1 2 3
3 3
1 2 5
2 3 5
3 1 2
0 0
Sample Output
3
2 简单的最短路板子题,用来练习各种算法,代码如下:
dijkstra:
const int maxm = ;
const int INF = 0x7fffffff; int N, M, G[maxm][maxm], d[maxm], vis[maxm]; struct Node {
int sum, i;
Node(int _sum, int _i) : sum(_sum), i(_i){} bool operator<(const Node &a) const {
return a.sum < sum;
}
}; void init() {
for (int i = ; i <= N; ++i) {
d[i] = INF;
}
memset(G, , sizeof(G)), memset(vis, , sizeof(vis));
} int main() {
while(scanf("%d%d",&N,&M) && N + M) {
init();
for (int i = ; i < M; ++i) {
int t1, t2, t3;
scanf("%d%d%d", &t1, &t2, &t3);
G[t1][t2] = G[t2][t1] = t3;
}
priority_queue<Node>q;
q.push(Node(, ));
while(!q.empty()) {
Node p = q.top();
q.pop();
if(vis[p.i]++)
continue;
for (int i = ; i <= N; ++i) {
if(G[p.i][i] && G[p.i][i] + d[p.i] < d[i]) {
d[i] = G[p.i][i] + d[p.i];
q.push(Node(d[i],i));
}
}
}
printf("%d\n", d[N]);
}
return ;
}
Bellman_Ford:
const int maxm = ;
const int maxn = ;
const int INF = 0x7fffffff; int N, M, v[maxn], u[maxn], cost[maxn], d[maxm]; void init() {
memset(v, , sizeof(v)), memset(u, , sizeof(u)), memset(cost, , sizeof(cost));
for (int i = ; i <= N; ++i)
d[i] = INF;
} int main() {
while(scanf("%d%d",&N,&M) && N + M) {
init();
for (int i = ; i < M; ++i) {
int t1, t2, t3;
scanf("%d%d%d", &t1, &t2, &t3);
v[i * ] = t1, u[i * ] = t2, cost[i * ] = t3;
v[i * + ] = t2, u[i * + ] = t1, cost[i * + ] = t3;
}
for (int j = ; j < N-; ++j) {
for (int i = ; i < M * ; ++i) {
int x = v[i], y = u[i], c = cost[i];
if(d[x] < INF)
d[y] = min(d[y], d[x] + c);
}
} printf("%d\n", d[N]);
}
return ;
}
SPFA:
const int maxm = ;
const int INF = 0x7fffffff; int N, M, G[maxm][maxm], d[maxm], inq[maxm]; struct Node {
int sum, i;
Node(int _sum, int _i) : sum(_sum), i(_i){}
}; void init() {
for (int i = ; i <= N; ++i) {
d[i] = INF;
}
memset(G, , sizeof(G)), memset(inq, , sizeof(inq));
} int main() {
while(scanf("%d%d",&N,&M) && N + M) {
init();
for (int i = ; i < M; ++i) {
int t1, t2, t3;
scanf("%d%d%d", &t1, &t2, &t3);
G[t1][t2] = G[t2][t1] = t3;
}
queue<int>q;
q.push();
inq[] = ;
while(!q.empty()) {
int u = q.front();
q.pop();
inq[u] = ;
for (int i = ; i <= N; ++i) {
if(G[u][i] && G[u][i] + d[u] < d[i]) {
d[i] = G[u][i] + d[u];
if(!inq[i])
q.push(i);
}
}
}
printf("%d\n", d[N]);
}
return ;
}
Floyd:
const int maxm = ;
const int INF = 0x7fffffff; int N, M, G[maxm][maxm]; void init() {
for(int i = ; i <= N; ++i) {
for (int j = ; j <= N; ++j) {
if(i == j)
G[i][i] = ;
else
G[i][j] = INF;
}
}
} int main() {
while(scanf("%d%d",&N,&M) && N + M) {
init();
for (int i = ; i < M; ++i) {
int t1, t2, t3;
scanf("%d%d%d", &t1, &t2, &t3);
G[t1][t2] = G[t2][t1] = t3;
}
for (int k = ; k <= N; ++k)
for(int i = ; i <= N; ++i)
for (int j = ; j <= N; ++j) {
if(G[i][k] < INF && G[k][j] < INF)
G[i][j] = min(G[i][j], G[i][k] + G[k][j]);
}
printf("%d\n", G[][N]);
}
return ;
}
Day4-A-最短路 HDU2544的更多相关文章
- ACM-最短路(SPFA,Dijkstra,Floyd)之最短路——hdu2544
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- 最短路--hdu2544
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HZNU-ACM寒假集训Day4小结 最短路
最短路 1.Floy 复杂度O(N3) 适用于任何图(不存在负环) 模板 --kuangbin #include<iostream> #include<cstdio> #in ...
- A过的题目
1.TreeMap和TreeSet类:A - Language of FatMouse ZOJ1109B - For Fans of Statistics URAL 1613 C - Hardwood ...
- HDU-2544 最短路 Dijkstra模板题
题目链接:https://vjudge.net/problem/HDU-2544 题意: 题目要求找到节点1到节点n之间的一条最短路 分析: Dijkstra模板题 单源最短路径,可以用dijkstr ...
- HDU2544 最短路dij
纯最短路. ///HDU 2544堆优化的最短路 #include <cstdio> #include <iostream> #include <sstream> ...
- hdu2544 最短路 Dijkstra算法
最短路(Dijkstra算法模板题) Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 最短路(hdu2544)Dijkstra算法二
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- HDU2544 最短路 2017-04-12 18:51 31人阅读 评论(0) 收藏
最短路 Time Limit : 5000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissio ...
随机推荐
- centos 8 cockpit系统监控
步骤: 1.激活cockpit服务 2.启动cockpit 3.查看cockpit服务是否启动 4.浏览器访问http://192.168.1.10:9090(用户名root,密码123) 5.查看系 ...
- MySQL自动备份实战--xtrabackup备份
MySQL数据备份企业实战.制作shell脚本 功能1:使用xtrabackup以每周为一个备份周期做备份(数据库+二进制日志,备份至本地/data/backup).提示: 周一某个时间点做一次完全备 ...
- Atcoder Grand Contest 039B(思维,BFS)
#define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;int col[207],s[207],n;c ...
- Android开发Intent应用概述
原文: http://bbs.gfan.com/android-93448-1-1.html 今天,我们来研究一下Intent,没错,就是前面说过的比较难理解的那个东西,希望通过这篇文章之后,你发现前 ...
- jsp include参数传送接收与应用
先看一个简单的应用,在a.jsp中写如下代码 <html> <head></head> <body> <div> <jsp:inclu ...
- 【STM32H7教程】第54章 STM32H7的LTDC应用之LCD电阻触摸和电容触摸
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第54章 STM32H7的LTDC应用之LCD电阻 ...
- leetCode练题——20. Valid Parentheses
1.题目 20. Valid Parentheses——Easy Given a string containing just the characters '(', ')', '{', '}', ...
- 【摘录自MDN】预定义函数
JavaScript语言有好些个顶级的内建函数: eval() eval()方法会对一串字符串形式的JavaScript代码字符求值. uneval() uneval()方法创建的一个Object的 ...
- nodejs的POST两种type类型提交(原生)
POST数据的两种提交格式 application/x-www-form-urlencoded(上传数据中没有文件) multipart/form-data (文件上传) 获取POST数据,post数 ...
- 【LOJ3087】「GXOI / GZOI2019」旅行者
题意 给定一个 \(n\) 个点 \(m\) 条边的的有向图,给出 \(k\) 个关键点,求关键点两两最短路的最小值. \(n\le 10^5, m\le 5\cdot 10^5\). 题解 二进制分 ...