floyd算法的思想:
把每个点作为中间点 更新所有的点之间的距离,以至于更新了所有的最小距离。
分析题意 求任意两点之间的所有连接通路中,障碍物的最小高度,而且是一条路上的最大高度。(也就是说 走哪条路所能跳的高度最小)。
代码如下:
#include<iostream>
using namespace std;
int dis[303][303];
int max(int a,int b)
{
return a>b?a:b;
}
void floyd(int n)
{
int i,j,k;
for(k=1;k<=n;k++)
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (dis[i][j]>max(dis[i][k],dis[k][j]))
dis[i][j]=max(dis[i][k],dis[k][j]);
}
int main()
{
int N,M,F;
while(cin>>N>>M>>F)
{
int i,a,b;
int s,e,k;
//memset(dis,-1,sizeof(dis));
for (i=0;i<=N;i++)
{
for (a=0;a<=N;a++)
{
dis[i][a]=1000001;
}
}
for (i=0;i<M;i++)
{
scanf("%d%d%d",&s,&e,&k);
dis[s][e]=k;
}
floyd(N);
for (i=0;i<F;i++)
{
scanf("%d%d",&a,&b);if (dis[a][b]==1000001)
{
cout<<"-1"<<endl;
}
else cout<<dis[a][b]<<endl;
}
}
return 0;
}