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 ...
随机推荐
- 「JSOI2014」矩形并
「JSOI2014」矩形并 传送门 我们首先考虑怎么算这个期望比较好. 我们不难发现每一个矩形要和 \(n - 1\) 个矩形去交,而总共又有 \(n\) 个矩形,所以我们把矩形两两之间的交全部加起来 ...
- 设计模式课程 设计模式精讲 5-2 工厂方法coding
1 课堂讲义 1.1 产品等级和产品簇 2 代码演练 2.1 工厂方法代码演练 1 课堂讲义 1.1 产品等级和产品簇 工厂方法是为了解决同一产品等级的业务抽象问题 抽象工厂方法是为了解决同一产品簇的 ...
- 女神说拍了一套写真集想弄成素描画?很简单,用Python就行了!
素描作为一种近乎完美的表现手法有其独特的魅力,随着数字技术的发展,素描早已不再是专业绘画师的专利,今天这篇文章就来讲一讲如何使用python批量获取小姐姐素描画像.文章共分两部分: 第一部分介绍两种使 ...
- Weka算法算法翻译(部分)
目录 Weka算法翻译(部分) 1. 属性选择算法(select attributes) 1.1 属性评估方法 1.2 搜索方法 2. 分类算法 2.1 贝叶斯算法 2.2 Functions 2.3 ...
- [转载] 由浅入深聊聊Golang的map
https://blog.csdn.net/u011957758/article/details/82846609 几个我忽略的点 基础 map中value的默认值 key与value的限制 valu ...
- PAT甲级2019冬季考试题解
A Good In C纯模拟题,用string数组读入数据,注意单词数量的判断 #include<bits/stdc++.h> using namespace std; ; ][]; in ...
- 吴裕雄--天生自然ORACLE数据库学习笔记:过程、函数、触发器和包
create procedure pro_insertDept is begin ,'市场拓展部','JILIN'); --插入数据记录 commit; --提交数据 dbms_output.put_ ...
- ES5中的this
参考资料:>>> this的指向 在 ES5 中,其实 this 的指向,始终坚持一个原理: this 永远指向最后调用它的那个对象 下面我们来看一个最简单的例子:(例子均来自参考资 ...
- swoole 父子进程间通信
<?php /** * 场景: * 监控订单表状态 父子进程通信 * 一个主进程 两个子进程实现 */ //设置主进程名 echo '主进程id:' . posix_getpid() . PHP ...
- Java 模拟斗地主
模拟斗地主 public class M1 { public static void main(String args[]) { DouDiZhu02(); } private static void ...