第1次实验——八皇后及N皇后问题
2014-06-09 22:10
162 查看
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种方法可以解决此问题。 请编程实现八皇后问题,并把92种解的前三种解输出到屏幕(8*8的二维矩阵,Q代表皇后,X代表空)。并把此问题的求解过程延伸到N皇后问题。
#include <conio.h> #include <math.h> #include <stdlib.h> #include <stdio.h> #include <iostream.h> #define QUEENS 8 int iCount = 0; int Site[QUEENS]; void Queen(int n); void Output(); int IsValid(int n); void main(){ cout<<" "<<"八皇后的解法:"<<endl; cout<<" "<<"-------------------------------------"<<endl; Queen(0); } void Queen(int n){ int i; if(n == QUEENS){ Output(); return; } for(i = 1 ; i <= QUEENS ; i++) { Site = i; if(IsValid(n)) Queen(n + 1); } } int IsValid(int n){ int i; for(i = 0 ; i < n ; i++){ if(Site[i] == Site ) return 0; if(abs(Site[i] - Site ) == (n - i)) return 0; } return 1; } void Output() { if(++iCount<=3){ cout<<"No."<<iCount<<endl; for(int i = 0 ; i < QUEENS ; i++){ for( int j = 1 ;j <= QUEENS ; j++) if(j==Site[i]) cout<<"1 "; else cout<<"0 "; cout<<endl; } } }
相关文章推荐
- 第1次实验——NPC问题(回溯算法、聚类分析) N皇后的问题
- 八皇后问题、N皇后问题回溯法详解
- 八皇后乃至N皇后问题
- 八皇后问题,Java实现,可推广解决N皇后问题
- 八皇后及n皇后问题
- 八皇后乃至n皇后问题
- 由八皇后问题到n皇后的推广
- 八皇后问题(N皇后问题)
- 八皇后非递归(仅使用一个数组且可扩展为N皇后问题)
- 八皇后问题算什么,来看看无穷皇后问题吧(转自Matrix67牛)——思考的乐趣
- 蓝桥杯练习题 BASIC-27 2n皇后问题(八皇后问题 搜索)
- 八皇后问题的扩展,任意数量皇后问题的较快速解法
- 实验1---N皇后问题
- 八皇后 n皇后 问题
- 第1次实验作业(NP问题—聚类分析)
- 八皇后问题的进化(4)-python写的八皇后
- 第一次实验--八皇后及N皇后问题
- 实验1——N皇后问题的求可行解个数(回溯法)
- 八皇后以及N皇后问题分析
- 从八皇后问题到n皇后问题(leetcode)