题解 | #连通图#
连通图
https://www.nowcoder.com/practice/569e89823a5141fe8a11ab7d4da21edf
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
const int N=1005;
bool visited[N]={false};
int n,m,a,b,cont;
vector<int> vec[N]; //vec[1]中存储与顶点1相邻的所有顶点
void Initial(){
cont=0;
for(int i=0;i<=1000;i++) vec[i].clear();
for(int i=1;i<=1000;i++) visited[i]=false;
}
void BFS(int u){
queue<int> q;
q.push(u);
visited[u]=true;
while(!q.empty()){
u=q.front();
q.pop();
//查找u结点的邻接结点
for(int i=0;i<vec[u].size();i++){
int v=vec[u][i];
if(visited[v]==false){
q.push(v);
visited[v]=true;
}
}
}
}
void BFSTraverse(){
for(int i=1;i<=n;i++){
if(visited[i]==false){
cont++;
BFS(i);
}
}
}
int main() {
while(cin>>n>>m){
if(n==0 && m==0) break;
Initial();
for(int i=0;i<m;i++){
cin>>a>>b;
vec[a].push_back(b);
vec[b].push_back(a);
}
BFSTraverse();
if(cont==1) cout<<"YES\n";
else cout<<"NO\n";
}
return 0;
}
