| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 动态回溯、N皇后问题 -> 正文阅读 |
|
[数据结构与算法]动态回溯、N皇后问题 |
动态回溯: 动态回溯 = 问题的解空间(二维数组描述) + 深度优先遍历 + 判断结果的结构 + 回溯 ?? ?动态回溯一般适合解决哪些问题: N皇后问题:8皇后 国际象棋 ??? 皇后可以走直线,也可以走斜线 米字格 ??? 遇到不合适的就往前回退,退到合适为止,如果退到第一个位置就重新摆,摆到另一个的地方 4 皇后问题 ?棋盘? 4*4 能放下 4 个皇后 假设第一个位置如图,只有两种方式:①先竖着再横着 遍历列 ②先横着再竖着 遍历行 两种方式都可以选择,但是 皇后不可能在同一行上 或者 在同一列上 利用递归的方法依次查找,回溯再查找 这里采用 遍历列 的方式:首先,找到第一列的第一个合适位置后,第一列就舍弃了(同一行或者同一列不可能还有皇后),进入第二列查找,从第二列的第一个位置开始判断能不能放皇后,找到合适位置放置皇后,把第二列舍弃,进入第三列,如果此时第三列无解,则回到第二列,寻找第二个合适位置,如果第二列没有合适位置,则回到第一列寻找下一个可以放置皇后的位置 . . . ???????????????????????????? ? ? ? ??? ? 遍历列??????????????????????????????????????????????????????????????????????????????????? 遍历行 确定方向后一个个去试即可,最终一定能找到 关于四皇后问题 遍历行 的方式参考:N皇后问题_hust_tank的博客-CSDN博客_n皇后问题 一行一行地摆放,在确定一行中的那个皇后应该摆在哪一列时,需要当前列是否合法,如果合法,则将皇后放置在当前位置,并进行递归,回溯。每行都摆满皇后时,则产生了一种解法,将所有解法收集并返回 下面代码采用 遍历列 的方式,遍历行 的方式只要把 i,j 位置交换即可
? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 9:46:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |