题意:就是给你一个三角形的邻接矩阵,让你求出一个最短路中的最大值。
题解:需要考虑一下如何把题目给你的三角形读入到我们自己的邻接矩阵。其余的dijjstra()跑一下就过了。
具体看代码注释:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int maxn = 200;
const int inf = 1e9;
int map[maxn][maxn];
int vis[maxn];
int dist[maxn];
int n;
void dijkstra(int s,int e){ // dijkstra算法
for(int i = 1 ; i <= n ; i ++){
vis[i] = 0;
dist[i] = map[s][i];
}
int Min,MinNum;
for(int i = 1; i <= n ; i ++){
Min = inf;
for(int j = 1 ; j <= n ; j++){
if(!vis[j] && dist[j] < Min){
Min = dist[j];
MinNum = j;
}
}
vis[MinNum] = 1;
for(int j = 1 ; j <= n ; j++){
if(!vis[j] && dist[j] > dist[MinNum] + map[MinNum][j])
dist[j] = dist[MinNum] + map[MinNum][j];
}
}
}
int main(){
while(~scanf("%d",&n)){
for(int i = 1 ; i <= n ; i ++){
for(int j = 1 ; j <= n; j ++){
if(i == j) map[i][j] = 0;
else map[i][j] = map[j][i] = inf;
}
}
for(int i =2 ; i <= n ; i ++) // 读入地图,三角行读入。
for(int j = 1; j < i ; j ++){
char s[10];
scanf("%s",s);
if(s[0] != 'x'){
map[i][j] = map[j][i] = atoi(s); // atoi()把字符串转化成整形的数,不会用的同学可以去百度一下具体用法。
}
}
// for(int i = 1 ; i <= n ; i ++){
// for(int j = 1; j <= n ; j ++)
// cout << map[i][j] << " ";
// cout << endl;
// }
dijkstra(1,n);
int res = -1 ;
// for(int i = 1; i <= n ; i ++)
// cout << dist[i] << endl;
for(int i = 1; i <= n ; i++)
res = max(res,dist[i]);
cout << res << endl;
}
}