简单的floyd算法
运用三层for循环建立一个二维矩阵,存有最小距离
找出一行中的最大值,然后求每行最大值的最小值
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<queue>
#include<algorithm>
#include<map>
#include<vector>
#include<cstring>
#include<math.h>
#include<stack>
#include <string>
using namespace std;
int N,M;
int D[105][105];
int main()
{
cin>>N>>M;
int x,y,d;
for(int i=1;i<=N;i++)
{
for(int j=1;j<=N;j++)
{
D[i][j]=999999;
}
}
for(int i=0;i<M;i++)
{
cin>>x>>y>>d;
D[x][y]= d;
D[y][x]= d;
}
for(int k=1;k<=N;k++)
{
for(int i=1;i<=N;i++)
{
for(int j=1;j<=N;j++)
{
if(D[i][k]+ D[k][j] < D[i][j] &&i!=j)
{
D[i][j]= D[i][k]+D[k][j];
}
}
}
}
/*for(int i=1;i<=N;i++)
{
for(int j=1;j<=N;j++)
{
cout<<D[i][j]<<" ";
}
cout<<endl;
}*/
int ans=0;
int maxn=999999;
for(int i=1; i<=N; i++)
{
int temp=-1;
for(int j=1; j<=N; j++)
{
if(D[i][j]> temp && i!=j)
{
temp= D[i][j];
}
}
if(temp< maxn && temp!=-1)
{
maxn=temp;
ans=i;
}
}
if(ans==0)
cout<<0;
else
cout<<ans<<" "<<maxn;
}