DFS+剪枝

该博客探讨了一道算法题目,涉及球队之间的“食物链”关系。作者通过反证法证明第一个数字必须为1,并采用深度优先搜索(DFS)策略配合剪枝来寻找字典序最小的解决方案。剪枝主要关注两种情况:一是搜索到答案时的处理,二是当没有队伍能战胜1号队伍时答案不存在的情况。博客提供了完整的AC代码实现。
摘要由CSDN通过智能技术生成

题目链接:题目详情 - 7-15 球队“食物链” (30 分) (pintia.cn)

思路:

(1)题目要求按照字典序最小的顺序输出,那么第一个数字必然是1

证明(反证法):如果第一个数字不能是1,说明1没有战胜过任何队伍
那么将1填入到食物链当中,必然有一个环节不符合条件(1没有后继)
所以没有任何一种序列符合条件

(2)我们dfs从小到大搜索答案,重点在于剪枝

剪枝主要有两种情况
1.已经搜索到答案
已经搜索到答案有两种情况
(1)当前dfs搜索到答案,直接返回
(2)因为除了当前dfs,栈中还会有其他的许多dfs,这时候就会出现一种情况
当前dfs已经搜索到答案,返回。但是之后还没有执行完的dfs又搜索出了答案
那么之后搜索的出的答案就会更新之前搜索到的答案,又因为我们是按字典序搜索的
所以之后的答案字典序肯定更大,答案就会出错
所以我们要增加一个判断:当答案已经搜索到了,可以是自己也可以是被人搜索到的
那么久返回。
2.答案不存在
如果没有队伍战胜过1号队伍&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值