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 ...
随机推荐
- 《Web安全攻防 渗透测试实战指南》 学习笔记 (二)
Web安全攻防 渗透测试实战指南 学习笔记 (二) 第二章 漏洞环境及实践
- 杭电1004 Let the Balloon Rise
Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- vue.js 强行赋值、刷新数组或者对象 方法之 $.set()
实际开发过程中,数据交互的的时候需要赋值,刷新,但是不可能每次赋值之后都刷新整个页面,所以就要用到 vue.js方法 $.set(),能实现赋值对象的局部刷新 语法:Vue.set(object, k ...
- 常用的OpenCV 2.0函数速查
OpenCV 2.0函数释义列表 1.cvLoadImage:将图像文件加载至内存: 2.cvNamedWindow:在屏幕上创建一个窗口: 3.cvShowImage:在一个已创建好的窗口中显示图像 ...
- Dart语言学习(十三) Dart Mixins 实现多继承
Mixins Mixins(混入功能)相当于多继承,也就是说可以继承多个类,使用with关键字来实现Mixins的功能. 那么多个类中有相同的方法时候,会被覆盖吗?覆盖的先后是什么? class A{ ...
- 【网摘】JS 或 jQuery 获取当前页面的 URL 信息
1.设置或获取对象指定的文件名或路径. window.location.pathname 2.设置或获取整个 URL 为字符串. window.location.href 3.设置或获取与 URL 关 ...
- Redis数据库在windows系统下的安装及使用
1.下载 Redis官方是不支持windows的,但是Microsoft Open Tech group 在 GitHub上开发了一个Win64的版本,下载地址:https://github.com/ ...
- 通过getGeneratedKeys获取记录的主键
Connection con=null; PreparedStatement ps=null; ResultSet rs=null; try { //建立连接 con= JDBCUtils.getCo ...
- 十一 三种Struts2的数据封装方式,封装页面传递的数据
Struts2的数据封装:Struts2是一个web层框架,框架是软件的半成品.提供了数据封装的基本功能. 注:Struts2底层(核心过滤器里面的默认栈里面的拦截器,具体见struts-defaul ...
- Java 代码中如何调用 第三方Api
在代码中调用第三方API 获取数据 package com.example.demo.utils; import com.alibaba.fastjson.JSONObject; import lom ...