Lunar New Year and a Wander
题目链接:https://codeforces.com/problemset/problem/1106/D
涉及知识点:
- 思维/简单搜索/set
solution:
- 题目要求我们找到字典序最小的路径
- 注意,已经走过了某个点,并不代表不能再走一次这个点!
- 字典序最小当然从1开始走,模拟过程非常简单,只需要找到当前节点相邻的所有点,把相邻且未遍历的点都扔到set集合里面,每次输出set中最小的点,然后把这个点的相邻的点扔到set里.....
- 不断重复,直到set集合为空,这样保证每走一步,下一步的最小的点最小
std:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 100005;
int n,m,x,y;
vector<int> v[maxn];
int flag[maxn];
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>x>>y;
v[x].push_back(y),v[y].push_back(x);
}
set<int> s;
set<int>::iterator it;
s.insert(1);
flag[1] = 1;
while(1){
if(s.empty())
break ;
it = s.begin();
int now = *it;
cout<<now<<" ";
s.erase(now);
flag[now] = 1;
for(int i=0;i<v[now].size();i++){
if(flag[v[now][i]])
continue ;
s.insert(v[now][i]);
}
}
return 0;
}