#1044. 【入门】最短路径

【入门】最短路径

说明

在带权有向图GG中,给定一个源点vv,求从vvGG中的其余各顶点的最短路径问题,叫做单源点的最短路径问题。

在常用的单源点最短路径算法中,迪杰斯特拉算法是最为常用的一种,是一种按照路径长度递增的次序产生最短路径的算法。

在本题中,读入一个有向图的带权邻接矩阵(即数组表示),建立有向图并按照以上描述中的算法求出源点至每一个其它顶点的最短路径长度。

输入格式

输入的第一行包含2个正整数nnss,表示图中共有nn个顶点,且源点为ss

以后的nn行中每行有nn个用空格隔开的整数。对于第ii行的第jj个整数,如果大于0,则表示第ii个顶点有指向第jj个顶点的有向边,且权值为对应的整数值(00≤权值100≤100);如果这个整数为0,则表示没有ii指向jj的有向边。当iijj相等的时候,保证对应的整数为0。

输出格式

只有一行,共有nn-1个整数,表示源点至其它每一个顶点的最短路径长度。如果不存在从源点至相应顶点的路径,输出-1。

请注意行尾输出换行。

样例

4 2
0 3 0 1
0 0 4 0
2 0 0 0
0 0 1 0
6 4 7
3 1
0 1 0
0 0 0
2 3 0
1 -1
3 1
0 0 0
0 0 0
0 0 0
-1 -1

提示

在本题中,需要按照题目描述中的算法完成迪杰斯特拉算法,并在计算最短路径的过程中将每个顶点是否可达记录下来,直到求出每个可达顶点的最短路径之后,算法才能够结束。

迪杰斯特拉算法的特点是按照路径长度递增的顺序,依次添加下一条长度最短的边,从而不断构造出相应顶点的最短路径。

另外需要注意的是,在本题中为了更方便的表示顶点间的不可达状态,可以使用一个十分大的值作为标记。

数据范围

2n50,1sn2≤n≤50,1≤s≤n