最短路径问题是经典图论问题之一。从工程意义上讲,最短路径问题是对大量工程问题的直观抽象。
最典型的例子是在地图上寻找最短驾车路径。
寻找从A到D的最短路径。
测试用例
用例1:
输入:
5,7
A,B,C,E,D
<0,3,30>,<0,1,10>,<0,2,20>,<1,3,10>,<1,2,5>,<2,4,30>,<3,4,20>
输出:A-B-E-D
用例2:
输入:
9,11
a,b,c,d,e,f,g,h,k
<0,1,6>,<0,2,4>,<0,3,5>,<1,4,1>,<2,4,1>,<4,6,8>,<4,7,7>,<3,5,2>,<5,7,4>,<6,8,1>,<7,8,4>
输出:a-c-e-g-k
用例3:
输入:
9,8
a,b,c,d,e,f,g,h,k
<0,1,10>,<1,2,20>,<2,3,30>,<3,4,40>,<4,5,50>,<5,6,60>,<6,7,70>,<7,8,80>
输出:a-b-c-d-e-f-g-h-k
解析:与14题一样需要注意一下字符串名称的输入问题。主要还是对Dijkstra算法的应用,下面是我参考的几篇文章与君分享:
1.【啊哈!算法】系列7:Dijkstra最短路算法
http://ahalei.blog.51cto.com/4767671/1387799
2. 迪杰斯特拉算法(可打印最短路径)
http://blog.csdn.net/cxllyg/article/details/7604812
3. Dijkstra算法的C语言实现
http://www.zeyes.org/study/clang/71.html
我刚开始是看了第一篇文章写的Dijkstra算法结构然后配合第二篇文章实现路径打印,结果提交到OJ上跟我说无结果输出!!!如下图
东悄悄西看看debug好久,后来索性换篇文章看看其他的Dijkstra算法的C实现,于是用了第三篇文章的结构与第二篇的结合,结果有输出了,但是还是WA了,一看有结果明显输出错误,如用例3最后的”K”就无法打印出来,似乎是他的Dijkstra算法某些细节有问题,但是第一篇的就没毛病,于是将第一篇与第二篇进行比对,以第三篇为主体结构,某些细节上参考第一篇,最后终于AC了。
代码