经典问题之八皇后问题 ﹏ヽ暗。殇╰゛Y 2022-05-19 04:06 223阅读 0赞 # 问题描述: # 八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后,为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。 # 思路: # 我们先来考虑,某个位置是否能够放皇后,如下图 ![70][] 两个皇后的位置是<1,1>,<2,3>,那么接下来的第三个皇后该怎么放呢? 1、设row为行,col为列,我们可以从第3行第0列开始循环。 2、当col与前面已放置皇后的列相等时,我们不放。 3、当abs(row - i) = abs(col - j),表示右上斜线与左上斜线已有皇后,我们不放,i,j表示已放置皇后的行值和列值。 然后采用递归方式,递归第row+1行,摆放下一个皇后,当row = 8时,表示8个皇后全部放置完成,即为一种可行的8皇后摆放方法。 # 代码实现: # #include <iostream> #include <cmath> using namespace std; int count = 0; //统计摆放方法数 void queen(int row,int a[]) { int flag; //用于标记该位置是否能够摆放皇后 if(row == 8){ count++; //递归到第八行,表示8个皇后全部放置完成,摆放方法+1 return; } else{ //从第0列开始,逐列判断,是否能够摆放皇后 for(int col = 0; col < 8; col++){ a[row] = col; //表示第row第col列 flag = 1; for(int i = 0; i < row; i++){ //如果 a[i] 列有值,则不能放值 //如果行值差等于列值差的绝对值相等,表示左上斜线或右上斜线有值 if(a[i] == col || abs(i - row) == abs(a[i] - col)){ //判断皇后位置是否符合条件 flag = 0; break;//不符合则退出 换另一列 } } if(flag) queen(row+1,a);//符合则递归下一行 } } } int main() { int a[8]; //存放皇后的位置,以数组下标为行,值为列 queen(0,a); //从第0行开始递归 cout << "总共有 " <<count << " 种摆法" << endl; return 0; } # 运行结果: # ![70 1][] [70]: /images/20220519/8866de929ff743c6906f6436ca17a307.png [70 1]: /images/20220519/1b8c0a961f46453080efcc2867920e03.png
相关 八皇后问题 转载自[N皇后问题的两个最高效的算法][N] import java.util.; public class Queen { 爱被打了一巴掌/ 2022年08月04日 10:53/ 0 赞/ 176 阅读
相关 八皇后问题 在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。试解出92种结果。 ![Cent 冷不防/ 2022年08月03日 00:49/ 0 赞/ 229 阅读
相关 八皇后问题 一、问题描述 ![Center][] 在8x8的国际棋盘上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能同一行、同一列、同一斜线上。 八皇后问题可以扩展为n ╰+哭是因爲堅強的太久メ/ 2022年07月14日 00:17/ 0 赞/ 192 阅读
相关 八皇后问题 回溯法求解八皇后问题 n皇后问题:n皇后问题是指在一个n\n的国际象棋棋盘上放置n个皇后,使得这n个皇后两两不在同一行,同一列,同一条对角线上,求合法的方案数。 如 小灰灰/ 2022年06月11日 08:49/ 0 赞/ 256 阅读
相关 八皇后问题 枚举法 include<iostream> using namespace std; int a[9]; int check(int n, 蔚落/ 2022年06月06日 00:38/ 0 赞/ 212 阅读
相关 八皇后问题 即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 由于皇后们是不能放在同一行的, 所以我们可以去掉“行”这个因素,即我第1次考虑把皇后放在第1行的某 柔情只为你懂/ 2022年05月28日 01:47/ 0 赞/ 216 阅读
相关 经典问题之八皇后问题 问题描述: 八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后,为了达到此目的,任两个皇后 ﹏ヽ暗。殇╰゛Y/ 2022年05月19日 04:06/ 0 赞/ 224 阅读
相关 八皇后问题 在国际象棋中,皇后是最强大的一枚棋子,可以吃掉与其在同一行、列和斜线的敌方棋子.八皇后问题是这样一个问题:将八个皇后摆在一张8\8的国际象棋棋盘上,使每个皇后都无法吃掉别的皇 Bertha 。/ 2022年05月18日 05:58/ 0 赞/ 213 阅读
相关 八皇后问题 include <iostream> include <cmath> include <cstring> using namespace std 港控/mmm°/ 2022年01月31日 00:29/ 0 赞/ 276 阅读
相关 八皇后问题 八皇后问题,以国际象棋为背景:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任意两个皇后都不能处于 叁歲伎倆/ 2021年09月25日 15:34/ 0 赞/ 440 阅读
还没有评论,来说两句吧...