读题时我真是崩溃了,本人现阶段英语 很差 ,根本就不知道什么意思。我感觉这是一道考英语水平的题(⊙﹏⊙)
题意
求起点到各点最短距离中的最大值(到每个点的最短距离,这些最短距离中找出最大的一个输出)
#include<iostream>
#include<cstring>
#include<cstdio>
#include <stdlib.h>
#define inf 0x3f3f3f3f
using namespace std;
int map[110][110],d[110];
int n;
bool v[110];
int main()
{
scanf("%d",&n);
char s[5];
for(int i=1;i<=n;i++)
{
v[i]=0;
map[i][i]=0;
}
for(int i=2;i<=n;i++)
{
for(int j=1;j<i;j++)
{
scanf("%s",s);
int x;
if(s[0]!='x')
{
x=atoi(s);
map[i][j]=map[j][i]=x;
}
else
map[i][j]=map[j][i]=inf;
}
getchar(); //吸收回车符
}
for(int i=1;i<=n;i++)
{
d[i]=map[1][i];
}
v[1]=1;
int u,minn;
for(int i=1;i<n;i++)
{
minn=inf;
for(int j=1;j<=n;j++)
{
if(!v[j] && d[j]<minn)
minn=d[u=j];
}
v[u]=1;
for(int j=1;j<=n;j++)
{
if(map[u][j]<inf)
{
if(d[j]>d[u]+map[u][j])
d[j]=map[u][j]+d[u];
}
}
}
int m=-1;
for(int i=2;i<=n;i++)
{
if(m<d[i])
m=d[i];
}
printf("%d\n",m);
return 0;
}