天天看点

九度1008,最短路径问题

<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&lt;n&lt;=1000, 0&lt;m&lt;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]

继续阅读