题意:n个点,每个点必须要遍历,给出点与点的相连情况, 输出最小字典序
思路:用搜索, bfs+vector+优先列队
代码:
#include<stdio.h>
#include<vector>
#include<queue>
#include<string.h>
using namespace std;
int n, m;
vector<int> G[100000 + 10];
bool vis[100000 + 10];
void bfs()
{
memset(vis, 0, sizeof(vis));
priority_queue<int, vector<int>, greater<int> >Q;
Q.push(1);
vis[1] = 1;
while(!Q.empty())
{
int u = Q.top();
Q.pop();
printf("%d ", u);
for(int i = 0; i < G[u].size(); i ++)
{
if(!vis[G[u][i]])
{
vis[G[u][i]] = 1;
Q.push(G[u][i]);
}
}
}
}
int main()
{
int a, b;
while(scanf("%d%d", &n, &m)!=EOF)
{
for(int i = 0; i <= 100000; i ++)
G[i].clear(); //vector的清空方式
for(int i = 0; i < m; i ++)
{
scanf("%d%d", &a, &b);
G[a].push_back(b);
G[b].push_back(a);
}
bfs();
printf("\n");
}
}