最短路
Time Limit : 5000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 11 Accepted Submission(s) : 8
Problem Description
在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?
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
#include<cstdio>
#include<cstring>
#define INF 0x7ffffff
#define MEM(arr,k) memset(arr,k,sizeof(arr))
int map[105][105];
int dis[105];//记录从第一个点(s) 到其他点的最短距离
bool visit[105];//标记该点是否被选中(加入到集合S)
int Dijkstra(int s,int n)
{
int i,j;
MEM(visit,false);
for(i=1;i<=n;i++) dis[i]=map[s][i]; dis[s]=0;//初始时,只有s点被选中
visit[s]=true;
for(i=1;i<=n;i++)
{
int tmp=INF;
int k;
for(j=1;j<=n;j++)
if(!visit[j]&&dis[j]<tmp) tmp=dis[k=j];//选中“一个”从s出发的最短的点(每次都从更新后的点中选出最短的且未被纳入集合S的点
if(tmp==INF) break;
visit[k]=true;
for(j=1;j<=n;j++)
{
if(!visit[j]&&dis[j]>dis[k]+map[k][j])//松弛操作,原理:三角形第三边大于其他两边之和
dis[j]=dis[k]+map[k][j]; //更新所有的从k出发的dis
}
}
return dis[n];
}
int main()
{
int n,m,i,j,a,b,c;
while(scanf("%d%d",&n,&m),(n||m))
{
//MEM(map,INF); 注意memset只能初始化为0或者-1,不能初始化为其他数!!!
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
map[i][j]=INF;
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
map[a][b]=map[b][a]=c;
}
printf("%d\n",Dijkstra(1,n));
}
return 0;
}
分享到:
相关推荐
**Dijkstra算法解HDU1874** Dijkstra算法是一种经典的图论算法,由荷兰计算机科学家艾兹格·迪科斯彻在1956年提出,主要用于解决单源最短路径问题。在这个问题中,我们需要从一个指定的起点(源节点)出发,找到...
1. Dijkstra算法:Dijkstra算法是最常用且基础的单源最短路算法,它使用贪心策略,逐步扩展从源节点s出发的最短路径树。算法保证了每次扩展的都是当前未访问节点中距离源节点最近的一个,最终得到s到所有节点的最短...
HDU算法讲解的PPT是一份非常有价值的教育资源,由知名教育机构HDU(杭州电子科技大学)的lcy老师精心制作并讲解。这份PPT涵盖了算法的各个方面,是学习和提升算法能力的理想材料。标签“算法”、“讲解”和“经典”...
HDU ACM代码集合是针对ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest)的一份资源,这个压缩包中的代码涵盖了多种算法,是参赛者或对算法学习感兴趣的人宝贵的参考资料。ACM竞赛旨在...
HDU(杭州电子科技大学)的ACM算法课件是一份宝贵的学习资源,旨在提升程序员的算法思维和解题能力。ACM,全称国际大学生程序设计竞赛(International Collegiate Programming Contest),是全球范围内的一项权威性...
最短路径 贪心实现代码 hdu 最短路 dijkstra 算法
根据提供的信息,我们可以总结出以下关于“hdu动态规划算法集锦”的知识点: ### 动态规划基础概念 动态规划是一种解决多阶段决策问题的方法,它通过将原问题分解为互相重叠的子问题,利用子问题的解来构建原问题...
HDU是一个知名的在线编程竞赛平台,它提供了大量的算法题目供参赛者练习和提交解决方案。这里的“java实现”意味着作者使用Java作为编程工具来解答这些算法题。 在Java编程方面,以下是一些可能涵盖的知识点: 1. ...
HDU(杭州电子科技大学在线评测系统)是一个深受程序员喜爱的在线编程练习平台,它提供了丰富的算法题目供用户挑战,帮助他们提升编程技能和算法理解能力。"hdu.rar_hdu"这个压缩包文件很可能是某位程序员整理的他在...
在ACM(国际大学生程序设计竞赛)中,HDU(杭州电子科技大学)的在线判题系统是许多参赛者磨炼算法技巧的重要平台。这个平台涵盖了众多的算法问题,旨在提升参赛者的编程能力和逻辑思维能力。以下是对标题和描述中...
"HDU最全ac代码"这个压缩包很可能是包含了在HDU平台上解题通过的完整源代码集合,旨在帮助学习者理解和掌握各种算法,提升编程解决问题的能力。 首先,我们来了解一下ACM/ICPC比赛。这是一项全球性的编程竞赛,参赛...
在本话题中,我们关注的是一个名为"HDU-EID-V2-核心板1"的特定设计,它涉及到STM32的核心组件、接口、电源管理和调试配置。 首先,核心板设计中提到了F103和F207两个型号的STM32芯片。F103和F207属于STM32的不同...
acm 技术大牛 课件 HDU 自学必备课件 全套齐全 (lecture_01)初识ACM (lecture_02)简单数学题 (lecture_03)递推求解 (lecture_04)动态规划(1)_ (lecture_05)计算几何基础_ (lecture_06)母函数 (lecture_...
HDU是杭州电子科技大学(Hangzhou Dianzi University)举办的一个在线编程竞赛平台,全称为HDU Online Judge。ACM是国际大学生程序设计竞赛(International Collegiate Programming Contest)的缩写,是一个全球性的...
描述中提到的"求多源点到单终点的最短路(反向建图)"进一步说明了问题的核心是找到从多个起点到一个固定终点的最短路径,并且采用了“反向建图”的策略。 在图论中,最短路径问题是一个经典问题,通常我们使用 ...
【标题】"HDU_2010.rar"是一个压缩包文件,其中包含了与"HDU 2010"相关的资源,特别是针对"HDU ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...
在ACM竞赛中,C++是最常用的语言,因其高效、灵活和丰富的库支持而备受青睐。学习C++的基本语法,包括变量、数据类型、控制结构、函数等,是首要任务。同时,理解算法基础如排序(冒泡、选择、插入、快速、归并等)...
总之,“hdu排序练习”不仅提供了一个学习和实践排序算法的平台,更是通往ACM竞赛乃至更高层次算法挑战的桥梁。通过对排序算法的深入学习和实战演练,不仅可以提升个人的算法水平,还能够在未来的学术研究和职业生涯...
【标题】"HDU2013暑期多校联合训练第一场0723-解题报告和标程"指的是2013年夏季,由杭州电子科技大学(HDU)主办的一场多学校参与的编程训练活动。这次训练是系列比赛的第一场,于7月23日举行,主要目的是提升参赛者...
"畅通工程"是HDU(杭州电子科技大学在线评测系统)中的一个算法问题,编号为1232。这个问题主要涉及图论和最短路径算法,是计算机科学领域经典的算法问题解决实例。通常这类问题会要求程序员设计算法来寻找图中最小...