题目传送门
题目大意
给定一个 n n n 个点的无向图,从根节点 1 1 1 开始,按照以下遍历规则遍历:
-
如果这个点所能到达的点中有没有遍历过的,那么就按照编号的从小到大的顺序遍历。
-
否则,那么:
- 如果此点为 1 1 1,结束遍历。
- 否则回溯到上一点。
请你按照遍历顺序输出到达过的点的编号。
解题思路
我们肯定得存储这个无向图对吧,于是就用到了 vector
容器。题目要求按照编号的递增顺序进行遍历对吧,所以就把每个节点的子节点都给 sort
排下序。题目说如果这个点的子节点中有没被遍历过的就遍历,都遍历过了就回溯对吧,所以我们直接 dfs
爆搜,输出一下当前节点的编号,遍历子节点,打标记,然后我们就会惊奇地发现这题居然如此简单。
如果不会建图的话,我就讲一下(会的神犇可以跳过)。
首先 vector
可以理解为一个动态数组,而 vector<int> a[200010]
就是定义一个二维数组,a[1].push_back(2)
就是将 2 2 2 添加在了编号为 1 1 1 的序列中,因此我们使用 vector
建图的时候,a[1].push_back(2)
就可以理解为 1 1