<dt>题目1008:最短路径问题</dt>
<dd></dd>
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:5119
解决:1631
<dl></dl>
<dt></dt>
题目描述:
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。
输入:
输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点t。n和m为0时输入结束。
(1<n<=1000, 0<m<100000, s != t)
输出:
输出 一行有两个数, 最短距离及其花费。
样例输入:
样例输出:
来源:
AC
之前用了佛洛依德超时了,改成C也超时了,于是用了Dijkstra,Dijkstra和Prim很像,Dijkstra是通过节点k来更新d[j],即:d[j] = d[k] + map[k][j];
而Prim是用刚加入最小生成树的节点k到j的距离来更新节点j到原最小生成树的距离,即d[j]=map[k][j]