题目描述
有多个城市组成一个铁路交通网络。任意两个城市之间有直连铁路,或者通过其他城市间接到达。给定某个城市,要求M时间内能到达任意指定的另一城市,求最小的M。
输入
每个测试用例由多行组成,第一行是整数n(1 <= n <= 100),表示城市的数目。
其余行表示邻接矩阵A。A(i,j)的值如果是一个整数t,表示城市i与城市j有铁路直连,需要t时间到达另一方。如果A(i,j)的值为x,表明城市i与城市j之间没有直连铁路。很明显有A(i,i) = 0。
由于对称关系和A(i,i) 为 0,输入只给出矩阵的下三角。第一行A(1,1)在输入中省略,第二行只有A(2,1),下一行则是A(3,1) 和A(3,2),依此类推。
输出
输出城市1所对应的最小M。
样例输入
5
50
30 5
100 20 50
10 x x 10
样例输出
有多个城市组成一个铁路交通网络。任意两个城市之间有直连铁路,或者通过其他城市间接到达。给定某个城市,要求M时间内能到达任意指定的另一城市,求最小的M。
输入
每个测试用例由多行组成,第一行是整数n(1 <= n <= 100),表示城市的数目。
其余行表示邻接矩阵A。A(i,j)的值如果是一个整数t,表示城市i与城市j有铁路直连,需要t时间到达另一方。如果A(i,j)的值为x,表明城市i与城市j之间没有直连铁路。很明显有A(i,i) = 0。
由于对称关系和A(i,i) 为 0,输入只给出矩阵的下三角。第一行A(1,1)在输入中省略,第二行只有A(2,1),下一行则是A(3,1) 和A(3,2),依此类推。
输出
输出城市1所对应的最小M。
样例输入
5
50
30 5
100 20 50
10 x x 10
样例输出
35
思路:最短路径模板题目,这个题目采用迪杰斯特拉算法就可以,模板题目,但是坑了我4个小时,学校的机房电脑有毒,以后再遇到这种思路没有问题的题目时,毁了之前的代码从新写一遍即可,听同学说这个题目卡时间不多,用弗洛伊德也可以O(N^3),对数据比较大的题目就不是很方便了。
include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
#define N 200
#define INF 10000 //对本题来说一个很大的数字
int s[N]; //是否找到到i的最短路径
int Path[N]; //记录从源点到终点vi的最短路径上的直接前驱顶点
int D[N]; //1到i的最短路径长度
int a[N][N]; //i--j或者 j--i的路径长度
int main()
{
int n;