题意
求出漫步时的最小的节点顺序
思路
最小堆保证字典序最小,vis保证每个点只输出1次
用vector建立邻接表
然后一次bfs跑一遍图就好了
code
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
const int maxn=1e5+5;
int n,m;
int vis[maxn];
vector<int> G[maxn];
priority_queue<int,vector<int>,greater<int> > pq;
void bfs(){
pq.push(1);
while(!pq.empty()){
int u=pq.top();
pq.pop();
if(vis[u]) continue;
vis[u]=1;
cout<<u<<" ";
for(auto v:G[u]){
if(!vis[v])
pq.push(v);
}
}
}
int main(){
cin>>n>>m;
for(int i=0;i<m;i++){
int u,v;
cin>>u>>v;
G[u].push_back(v);
G[v].push_back(u);
}
bfs();
return 0;
}
学如逆水行舟,不进则退