博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hdoj 2544
阅读量:6580 次
发布时间:2019-06-24

本文共 1594 字,大约阅读时间需要 5 分钟。

描述

在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?

输入

输入包括多组数据。每组数据第一行是两个整数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条商店到赛场的路线。

输出

对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间

样例输入

2 1

1 2 3
3 3
1 2 5
2 3 5
3 1 2
0 0

样例输出

3

2

思路

dijkstra算法,套模版就好

代码

#include 
#define INF 0xffffff#define maxn 101using namespace std; int dist[maxn][maxn];int line[maxn], f[maxn];int n, m;void init(){ memset(f, 0, sizeof(f)); for(int i = 0; i < maxn; i++) for(int j = 0; j < maxn; j++) dist[i][j] = INF;}void dijkstra(int v){ for(int i = 0; i < n; i++) if(i != v) line[i] = dist[v][i]; else line[i] = INF; f[v] = 1; for(int i = 0; i < n; i++) { int min = INF, k = v; for(int j = 0; j < n; j++) if(!f[j] && line[j] < min) {min = line[j]; k = j;} f[k] = 1; for(int j = 0; j < n; j++) if(!f[j] && dist[k][j] < line[j] - min) line[j] = dist[k][j] + min; }}int main(){ while(~scanf("%d%d", &n, &m)) { if(n+m==0) break; init(); for(int i = 0; i < m; i++) { int x, y, d; scanf("%d %d %d", &x, &y, &d); x--, y--; if(dist[x][y] > d) dist[x][y] = dist[y][x] = d; } dijkstra(0); if(line[n-1] < INF) printf("%d\n", line[n-1]); else printf("-1\n"); } return 0; }

转载于:https://www.cnblogs.com/HackHarry/p/8403697.html

你可能感兴趣的文章
ProtectData
查看>>
Python——数据存储:XML操作
查看>>
计算直线的交点数
查看>>
国内php的blog程序推荐
查看>>
【设计模式】雷锋依然在人间 --- 工厂方法模式
查看>>
C++11 锁 lock
查看>>
oracle之 ORA-12557: TNS: 协议适配器不可加载
查看>>
mysql 索引
查看>>
2018-2019-2 网络对抗技术 20165318 Exp1 PC平台逆向破解
查看>>
BZOJ 3926 && ZJOI 2015 诸神眷顾的幻想乡 (广义后缀自动机)
查看>>
关于图片或者文件在数据库的存储方式归纳
查看>>
存储过程和SQL语句比较及存储过程在C#中调用方法
查看>>
JpGraph的介绍和使用
查看>>
C#开发移动应用系列(1.环境搭建)
查看>>
hihocoder 1014 Trie树
查看>>
64位ubuntu13.10安装32位库
查看>>
轻松搭建docker应用的mesos集群
查看>>
物联网实验4 alljoyn物联网实验之手机局域网控制设备
查看>>
new Integer(1)和Integer.valueOf(1)的区别
查看>>
Web 前端开发者必知CSS 属性
查看>>