TOJ 2732存钱计划(三)(单源最短路)
2013-08-31 20:32
393 查看
存钱计划(三)
时间限制(普通/Java):1000MS/30000MS 运行内存限制:65536KByte总提交: 18 测试通过: 16
描述
TZC的店铺比较多,上次WY随便走只要能走到就行,现在他学聪明了。WY去买东西的话,确定一家店以后,当然他先要想想怎么样走到那家店走的路最少。店与店之间是有走的方向的,从店A到店B可以,店B到店A未必可以。店与店之间是有一定距离的。
上面就是路线,为方便起见,店铺都用数字表示,0表示WY的起点,店与店之间以及起点与店距离用d表示。WY从0开始到4店铺 那么最短路线为0-->3-->2-->4 总长为 60。
如果从0店铺开始到1店铺最短路线只有0-->1 总长 10。
当然也有可能没有路的情况。
输入
输入有多组测试数据。
每组数据的第一行为整数n(n<=10),表示店铺总数。所有店铺的编号为0~n-1。
接下来有若干行,每行为3个整数
a b t
表示a编号的店铺走向b编号的店铺之间的一条路径,长度为t。0<=a,b<n(为有向路径,不能反向行走)。
当a b t的值为0 0 0 表示店铺之间的路径输入完毕,不做任何处理。
最后一行输入店铺的编号k(k<n)
输入n为0时表示结束程序。
输出
输出从店铺0到k店铺的最短路线的长度。如果没有路的话,输出 NO WAY!
样例输入
5 0 1 10 0 3 30 0 4 100 1 2 50 2 4 10 3 2 20 3 4 60 0 0 0 4 5 0 1 10 2 0 50 0 3 10 0 0 0 2 0
样例输出
60 NO WAY!
提示
简单最短路径问题
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
const int INF = 0x7fffffff;
const int maxn = 12;
int g[maxn][maxn];
int d[maxn];
bool vis[maxn];
int gn;
void init() {
int i, j;
for(i = 0; i < gn; i++) {
for(j = 0; j < gn; j++) {
if(i == j) {
g[i][j] = 0;
}
else {
g[i][j] = INF;
}
}
}
}
void dijkstra() {
int i, j;
for(i = 0; i < gn; i++) d[i] = INF;
d[0] = 0;
memset(vis, 0, sizeof(vis));
for(i = 0; i < gn; i++) {
int mark = -1, mindis = INF;
for(j = 0; j < gn; j++) {
if(!vis[j] && d[j] < mindis) {
mindis = d[j];
mark = j;
}
}
if(mark == -1) break;
vis[mark] = true;
// printf("mark = %d\n", mark);
for(j = 0; j < gn; j++) {
if(!vis[j] && d[mark] != INF && g[mark][j] != INF) {
d[j] = min(d[j], d[mark] + g[mark][j]);
// printf("d[%d] = %d\n", j, d[j]);
}
}
}
}
int main()
{
int x, y, w;
while(scanf("%d", &gn) != EOF && gn) {
init();
while(scanf("%d%d%d", &x, &y, &w)==3) {
if(x==0 && y==0 && w==0) break;
if(g[x][y] > w) {//处理重边.
g[x][y] = w;
}
}
dijkstra();
int t;
scanf("%d", &t);
if(d[t]==INF) {
printf("NO WAY!\n");
}
else {
printf("%d\n", d[t]);
}
}
return 0;
}
相关文章推荐
- TOJ 2732存钱计划(三)(单源最短路)
- TOJ 2732存钱计划(三)(单源最短路)
- ZOJ3408 Gao 单源最短路乱搞
- HDU1874 单源最短路
- 图论: bellman_ford 求单源最短路…
- 单源最短路(Dijkstra算法) 详细介绍
- ACM 2. 旅行计划(水最短路)
- 小明的存钱计划
- 最短路练习10/poj/1511 Invitation Cards ,(两次spfa),(单源最短路,优先队列优化的Dijkstra)
- Sicily 1031 Campus(单源最短路Dijkstra)
- HDU-3665(单源最短路)
- HDU 2544 最短路(单源最短路 dijkstra / floyd / dijkstra(堆优化)/dijkstra+邻接链表+堆优化)
- HDU 2066 一个人的旅行(单源最短路SPFA)
- Currency Exchange POJ - 1860 单源最短路 Bellman_Ford
- 最短路之单源最短路
- PAT 1003. Emergency 单源最短路
- HDU 2544 - 最短路(单源最短路)
- PAT All Roads Lead to Rome 单源最短路
- 单源最短路:SPFA学习笔记
- 【UVA1416】(LA4080) Warfare And Logistics (单源最短路)