题目链接:https://www.luogu.org/problem/P1341
思路:
给2n个点,取出其中n+1个点,判断能不能组成一个符合题意的字符串。
可以比拟图,n + 1个点有n条边,然后他们又是一条路上的点。
可以比拟欧拉图,如果可以构成环,就是说每个点的度都是偶数,
即从任意点出发都能回到该点,就是欧拉闭迹,即欧拉回路。
如果不能构成环,有两个点的度是奇数,其他点的度数都是偶数,说明
可以组成一条欧拉开迹,就是欧拉回路拆去了某条边,让环无法形成。
那题目就简单了,这里有一个注意点,也算一个坑吧,就是输出路线时,
如果你是边输出边遍历点的话会出现一种情况:
ax xy yz za zz
输出答案: axyzaz
实际答案: axyzza
为什么呢,第一个答案很容易想到,第二个呢?
注意:我们在存答案时,我们总是 str[++l] = ic[now](代码里有),那么什么时候才会写下第一个答案呢?
显然,当一个分支到底了,写下答案并层层回归。那么我们就不难想出第二种答案了,
当z因为贪心遍历到a,而a没有与其他点相邻,那么a就是第一个写下的答案了,如果还有与a相邻的点,
那么一定会进入另一个分支。
补:当然需要判是否连通,但这个题不判也可以过,数据有点水。
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include