题解
2026-09-06 22:30:02
发布于:上海
4阅读
0回复
0点赞
用bfs对每个点跑一遍最短路即可
#include <algorithm>
#include <bits/stdc++.h>
#include <cstring>
#include <queue>
using namespace std;
const int N = 2005;
const int INF = 1e9;
int n,m;
vector<int> g[N];
bool vis[N];
int d[N];
queue<int>q;
void bfs(int s){
memset(vis , 0 , sizeof(vis));
vis[s] = 1;
q.push(s);
d[s] = 0;
while(!q.empty()){
int t = q.front();
q.pop();
vis[t] = 1;
for(int u : g[t]){
if(vis[u] != 1){
d[u] = d[t] + 1;
vis[u] = 1;
q.push(u);
}
}
}
}
int minn = INF,ans;
int main(){
cin >> n >> m;
for(int i = 1; i <= m; i++){
int u,v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
for(int i = 1; i <= n; i ++){
bfs(i);
int maxn = *max_element(d + 1, d + n + 1);
if(minn > maxn){
ans = i;
minn = maxn;
}
}
cout << ans;
return 0;
}
这里空空如也

有帮助,赞一个