八皇后问题
用回溯法解决该问题: G++:
刚开始看到这个问题,会想到遍历,但是仔细想想会发现太复杂了,其实一个个皇后排的话,你会
发现前几列不能满足了,后面的就都不行了,所以我们要用回溯法倒回去,解决这种问题最好是用递归,
简洁,明了。
变量的定义:
#include<iostream> using namespace std ; #define NUM 9 static int a[NUM] ;//创建数组 int count=0 ;//计数
判断本列的这个皇后能否满足情况:
bool judgeQueen(int index,int value) { int i,j,data; for(i=1;i<index;i++) { data = a[i] ; if(data == value) return 0 ; //列相等 if((data-i)==(value-index)) return 0 ;//负斜一条线 if((data+i)==(value+index)) return 0 ;//正邪一条线 } return true ; }
递归算法实现:
void InitQueen(int index) { int i,j ; for(i=1;i<9;i++){ if(judgeQueen(index,i))//这列能放下皇后 { a[index] = i ; if(index == 8) //这种摆法能成功 { count++ ; a[index] = 1 ; continue ; } InitQueen(index + 1) ;//继续递归 a[index] = 1 ; } } }
解决方法二: Java
声明变量:
// 同栏是否有皇后,1表示有 private int[] column; // 右上至左下是否有皇后 private int[] rup; // 左上至右下是否有皇后 private int[] lup; // 解答 private int[] queen; // 解答编号 private int num;
构造方法初始化:
public Queen() { column = new int[8+1]; rup = new int[2*8+1]; lup = new int[2*8+1]; for(int i = 1; i <= 8; i++) column[i] = 1; for(int i = 1; i <= 8; i++) rup[i] = lup[i] = 1; queen = new int[8+1]; }
回溯方法:
public void backtrack(int i) { if(i > 8) { showAnswer(); } else { for(int j = 1; j <= 8; j++) { if(column[j] == 1 && rup[i+j] == 1 && lup[i-j+8] == 1) { queen[i] = j; // 设定为占用 column[j] = rup[i+j] = lup[i-j+8] = 0; backtrack(i+1); column[j] = rup[i+j] = lup[i-j+8] = 1; } } } }
相关推荐
算法 加 算法算法 八皇后问题 八皇后问题
它们被应用于解决各种复杂问题,包括经典的八皇后问题。八皇后问题是一个著名的棋盘放置问题,要求在8×8的棋盘上摆放8个皇后,使得任意两个皇后都不能在同一行、同一列或同一对角线上。下面将详细解释这些方法以及...
八皇后问题是一个经典的回溯法问题,要求在8×8的国际象棋棋盘上放置8个皇后,使得任何两个皇后都无法在同一行、同一列或同一斜线上直接攻击彼此。这是一个典型的约束优化问题,具有多个解,并且随着皇后数量的增加...
八皇后问题是一个经典的回溯法问题,它要求在8×8的棋盘上放置8个皇后,使得任意两个皇后都不能在同一行、同一列或同一条对角线上。这个问题的解决方案数量为92种,而通过遗传算法可以有效地寻找这些解。 遗传算法...
这是通过遗传算法求解八皇后问题的例子(比较经典) 步骤: 1,先是随机生成一定种群数量的染色体; 2,从种群中选择较为优秀的染色体个体; 3,按顺序让两个父染色体生成两个子染色体,理论上,子染色体会随着...
个人写的一个八皇后问题,有需要的,可以下载。用C++编写的!
自己根据拉斯维加斯算法,写的一个用来求解八皇后问题的python程序,其中可以自定义棋盘大小,显示程序的执行时间。
用滚轮盘的方法,以及自己设立了一个适应度函数,来用遗传算法解决八皇后问题。
八皇后问题的C++算法,利用回溯算法输出全部可行解。
回溯算法(八皇后问题) 绝对可以运行 c语言
八皇后问题算法求解
对经典算法八皇后问题的说明,以及代码示例,代码中有详尽的注释,有助于读者充分理解其递归调用的逻辑!
主要介绍了C语言基于回溯算法解决八皇后问题的方法,简单描述了八皇后问题,并结合实例形式分析了C语言使用回溯算法解决八皇后问题的相关操作技巧,需要的朋友可以参考下
八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线...
八皇后问题是一个经典的问题,在棋盘上放置八个皇后,使得任意两个皇后都无法在同一行、同一列或同一条对角线上,从而找到所有可能的摆放方案。这个问题在计算机科学中常被用来作为解决约束满足问题的实例,同时也...
8皇后问题算法实现,基于Java的8皇后问题
八皇后问题 递归算法 可以输入皇后的值 输出排列的结果
《八皇后问题与Qt界面实现解析》 八皇后问题是一个经典的计算机编程问题,它源于19世纪由数学家鲁道夫·费迪南德·莱昂哈德·欧拉提出,旨在在...通过实验报告和源代码,我们可以更深入地研究这一经典问题的解决方案。
linux c语言实现八皇后问题。希望对你的学习
经典的八皇后问题是学习算法及程序设计语言的必经之路,这里提供一种算法