ECJTUACM18级队员开学第一场训练赛 Lunar New Year and a Wander CodeForces - 1106D

题意: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");
  }
}

 

猜你喜欢

转载自www.cnblogs.com/yuanweidao/p/10482676.html