鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: jerryxjr1220

[技术交流] python小练习(066):回溯法(深度优先搜索)实现全排列

[复制链接]
发表于 2019-3-22 18:55:04 | 显示全部楼层
学习学习学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-16 08:43:07 | 显示全部楼层
看下
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-7-21 01:06:59 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-8-6 10:05:35 | 显示全部楼层
学习学习!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-9 12:51:06 | 显示全部楼层
怎么
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-8-28 15:30:51 | 显示全部楼层
学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-2 02:53:51 | 显示全部楼层
学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-2 10:02:43 | 显示全部楼层
学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-12 11:30:35 | 显示全部楼层
看到一个八皇后的算法,其实全排列就是不检查斜线,这个八皇后(或者说八个车)的解,就是全排列
另外八皇后中需要检查皇后位置,这里只要把列表转成词典,检查一下长度就行了(有重复元素,比如到第二层,应该是1,2,如果是1,1,那么词典长度就只有1了,需要排除):
  1. def permutation(n,floor,per):
  2.     for pos in range(n):
  3.         if len(set(per + [pos])) == floor:
  4.             if floor == n:
  5.                     yield [pos,]
  6.             else:
  7.                     for result in permutation(n,floor+1, per + [pos,]):
  8.                             yield [pos,] + result

  9. for res in permutation(4,1,[]):
  10.     print(res)
复制代码

结果:
[0, 1, 2]
[0, 2, 1]
[1, 0, 2]
[1, 2, 0]
[2, 0, 1]
[2, 1, 0]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-16 17:33:39 | 显示全部楼层
谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-29 17:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表