题意:给出一个n和一个n-1行的下三角矩阵(表示距离,x=inf),求起点1到2~n个点的最短距离的最大值.
题解:数据很水故可以直接一波Floyed.(Floyed-最暴力的最短路算法O(n^3) )
代码如下:
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<algorithm>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
int dis[200][200];
char s[105];
int n;
int Floyed() {
for (int k = 1; k <= n; k++)
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
int ans = 0;
for (int i = 2; i <= n; i++)
if (ans < dis[1][i])ans = dis[1][i];
return ans;
}
void init() {
for (int i = 0; i <= n; i++)
for (int j = 0; j <= n; j++) {
if (i == j)dis[i][j] = 0;
else dis[i][j] = inf;
}
}
void solve() {
for (int i = 2; i <= n; i++)
for (int j = 1; j < i; j++) {
scanf("%s", s);
if (s[0] != 'x')
dis[i][j] = dis[j][i] = atoi(s); //这里用到一条char[]转int的函数
}
printf("%d\n", Floyed());
}
int main() {
while (~scanf("%d", &n)) {
init();
solve();
}
}