第一个问题:想知道每一轮循环中要对所有的顶点做松弛操作,假如第一轮循环该对1这个顶点做松弛操作,但1这个顶点并没有和0这个节点直接相连,这时distTo【1】+ -4 肯定要小于distTo【2】,这样算法岂不是就出现问题了,是不是对这样还未访问的顶点再依次循环遍历的时候应该跳过?
第二个问题:感觉整个算法并没有体现出从原点s出发找最短路径,如果我把原点设置为2,那么最终distTo和fromed应该是和原点为0时一样吧
老师我自己想的解决方案如下,不知道对不对,您看下是否可行:
问题一:再循环每个节点时对from做判断,已经连接的顶点再进行松弛操作,否则跳过。
问题二:在用问题一判断的同时,不判断原点s的from,因为第一次遍历的时候from里都是空,这样使得第一次循环一定是从原点s开始遍历的,这样如果原点设置为2,那么到0没有路径的话,永远也不会对0做松弛操作
登录后可查看更多问答,登录/注册