八字带八绝数组怎么化解 什么是八绝数组


点击上方"java全栈技术"关注,每天学习一个java知识点
原创程序员小灰

八字带八绝数组怎么化解 什么是八绝数组

文章插图

八字带八绝数组怎么化解 什么是八绝数组

文章插图

————— 第二天 —————
八字带八绝数组怎么化解 什么是八绝数组

文章插图

八字带八绝数组怎么化解 什么是八绝数组

文章插图

八字带八绝数组怎么化解 什么是八绝数组

文章插图

题目是什么意思呢?
国际象棋中的皇后,可以横向、纵向、斜向移动 。如何在一个8X8的棋盘上放置8个皇后,使得任意两个皇后都不在同一条横线、竖线、斜线方向上?
让我们来举个栗子,下图的绿色格子是一个皇后在棋盘上的“封锁范围”,其他皇后不得放置在这些格子:
八字带八绝数组怎么化解 什么是八绝数组

文章插图

下图的绿色格子是两个皇后在棋盘上的“封锁范围”,其他皇后不得放置在这些格子:
八字带八绝数组怎么化解 什么是八绝数组

文章插图

那么,如何遵循规则,同时放置这8个皇后呢?让我们来看看小灰的回答 。
八字带八绝数组怎么化解 什么是八绝数组

文章插图

八字带八绝数组怎么化解 什么是八绝数组

文章插图

————————————
八字带八绝数组怎么化解 什么是八绝数组

文章插图

八字带八绝数组怎么化解 什么是八绝数组

文章插图

八字带八绝数组怎么化解 什么是八绝数组

文章插图

八字带八绝数组怎么化解 什么是八绝数组

文章插图

什么是八皇后问题?
八皇后问题是一个古老的问题,于1848年由一位国际象棋棋手提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,如何求解?
以高斯为代表的许多数学家先后研究过这个问题 。后来,当计算机问世,通过计算机程序的运算可以轻松解出这个问题 。
八字带八绝数组怎么化解 什么是八绝数组

文章插图

八字带八绝数组怎么化解 什么是八绝数组

文章插图

如何解决八皇后问题?
所谓递归回溯,本质上是一种枚举法 。这种方法从棋盘的第一行开始尝试摆放第一个皇后,摆放成功后,递归一层,再遵循规则在棋盘第二行来摆放第二个皇后 。如果当前位置无法摆放,则向右移动一格再次尝试,如果摆放成功,则继续递归一层,摆放第三个皇后......
如果某一层看遍了所有格子,都无法成功摆放,则回溯到上一个皇后,让上一个皇后右移一格,再进行递归 。如果八个皇后都摆放完毕且符合规则,那么就得到了其中一种正确的解法 。
说起来有些抽象,我们来看一看递归回溯的详细过程 。
1.第一层递归,尝试在第一行摆放第一个皇后:
八字带八绝数组怎么化解 什么是八绝数组

文章插图

2.第二层递归,尝试在第二行摆放第二个皇后(前两格被第一个皇后封锁,只能落在第三格):
八字带八绝数组怎么化解 什么是八绝数组

文章插图

3.第三层递归,尝试在第三行摆放第三个皇后(前四格被第一第二个皇后封锁,只能落在第五格):


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。