回溯问题-排列组合

排列组合问题

组合要简单一点,排列要难一点
组合是不要求顺序的,相同元素不同顺序算一个组合方式
排列是要求顺序的,相同元素不同顺序算不同的排列方式

如果要用到排列
就要用来回溯算法,回溯算法在搜索中寻找问题的解,发现不满足条件时,就回溯返回上一步,尝试别的路。

这里先跳过一维的排列组合问题,我们来思考一下二维的排列组合问题,即网格、迷宫类的问题。

在玩具蛇题目中,我们要求贪吃蛇不同样式的摆放个数。需要初始接口和后续接口做手脚,需要用一个vis数组来记录已经经过的路径。在进入dfs初始入口和dfs后续入口之前,我们需要用vis数组来对该入口记录;在从dfs初始入口和dfs后续入口出来之后,我们要在vis数组里面消除这个路径记录,方便尝试其他路径。这就和排列问题差不多,相同元素不同顺序算不同的排列方式。

在求最大岛屿面积和最大连通量的时候,完全不涉及到排列组合问题,所以不需要回溯。但是都必须在初始入口和后续入口之前做准备工作。

在组合问题中,不需要在初始接口之后再次进行回溯,因为完成了其他元素与初始元素的所有配对后,不会再回到初始元素的位置是哪个了,比如组合问题、组合综合|||,电话号码的字母组合。那为什么这几道组合问题的dfs(0)后面不进行回溯,因为dfs(0)在这些一维回溯题里面知识一个接口,在dfs函数里面,那个初始位置还会出现,for()循环的初始指针就是指向的初始元素。而二维回溯问题里面,进入dfs函数后,指针指向的都是下一个元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值