题目来源 北邮OJ
使用FLoyd算法即可
【注意事项】
使用memset()函数初始化二维数组时要千万小心:
1.二维整型数组利用memset()函数初始化时,只能初始化为0或者-1,否则二维整型数组的值将为随机数。
2.二维char数组利用memset()函数初始化时不受限制,可初始化为任意字符。
#include<bits/stdc++.h>
using namespace std;
/*Input:
2
3 3
1 2
1 3
2 3
4 2
1 2
2 3
*/
int main()
{
int T,M,N,x,y;
int a[55][55];
cin>>T;
while(T--){
cin>>N>>M;
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++){
a[i][j]=N;
}
}
while(M--){
cin>>x>>y;
a[x][y]=a[y][x]=1;
}
for(int k=1;k<=N;k++){
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++){
if(a[i][k]+a[k][j]<a[i][j]){
a[i][j]=a[i][k]+a[k][j];
}
}
}
}
int min=INT_MAX,sum,k;
for(int i=1;i<=N;i++){
sum=0;
for(int j=1;j<=N;j++){
sum+=a[i][j];
}
if(sum<min){
min=sum;
k=i;
}
}
cout<<k<<endl;
}
}