思路:
(1)题目要求按照字典序最小的顺序输出,那么第一个数字必然是1
证明(反证法):如果第一个数字不能是1,说明1没有战胜过任何队伍
那么将1填入到食物链当中,必然有一个环节不符合条件(1没有后继)
所以没有任何一种序列符合条件(2)我们dfs从小到大搜索答案,重点在于剪枝
剪枝主要有两种情况
1.已经搜索到答案
已经搜索到答案有两种情况
(1)当前dfs搜索到答案,直接返回
(2)因为除了当前dfs,栈中还会有其他的许多dfs,这时候就会出现一种情况
当前dfs已经搜索到答案,返回。但是之后还没有执行完的dfs又搜索出了答案
那么之后搜索的出的答案就会更新之前搜索到的答案,又因为我们是按字典序搜索的
所以之后的答案字典序肯定更大,答案就会出错
所以我们要增加一个判断:当答案已经搜索到了,可以是自己也可以是被人搜索到的
那么久返回。
2.答案不存在
如果没有队伍战胜过1号队伍&
DFS+剪枝
于 2022-03-09 20:24:24 首次发布
该博客探讨了一道算法题目,涉及球队之间的“食物链”关系。作者通过反证法证明第一个数字必须为1,并采用深度优先搜索(DFS)策略配合剪枝来寻找字典序最小的解决方案。剪枝主要关注两种情况:一是搜索到答案时的处理,二是当没有队伍能战胜1号队伍时答案不存在的情况。博客提供了完整的AC代码实现。
摘要由CSDN通过智能技术生成