给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。
Input
输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点。n和m为0时输入结束。
(1< n< =1000, 0< m< 100000, s != t)
Output
输出 一行有两个数, 最短距离及其花费。
Sample Input
3 2
1 2 5 6
2 3 4 5
1 3
0 0
Sample Output
9 11
分析与解答
这题我调试了八个小时
我总结一下我对dijkstra的认识
1.dijkstra算法可以求从单个源点出发到所有结点的最短路,这个题就是坑到这了,我写两个参数就wrong answer了,就是说,你调用这个函数只需要一个参数,就是起点。终点是n已经固定了,现在你说终点是t,哪怕走到终点n的路不经过t,你输出dis[t],也是从起点到t的最短路。
每标记一次就说明被标记的这个数的dis已经确定了。我们循环n次目的就是为了标记n次确定n个数的dis。我们初始化起点的