C++八皇后问题源码
编写程序对八皇后问题进行求解:在8行8列的棋盘上放置8个皇后,使任一个皇后都不能吃掉其他的7个皇后(注:皇后可吃掉与她处于同行或同列或同一对角线上的其他棋子),并将结果以某种方式显示出来。
例如,当求出下述的一个解时,可输出如下信息来表示该解(输出了表示摆放皇后的坐标位置以及“棋盘状态”— 棋盘中有皇后的位置放一个“Q”字符,其他位置为“+”字符)。
(1,1) (5,2) (8,3) (6,4) (3,5) (7,6) (2,7) (4,8)
Q + + + + + + +
+ + + + + + Q +
+ + + + Q + + +
+ + + + + + + Q
+ Q + + + + + +
+ + + Q + + + +
+ + + + + Q + +
+ + Q + + + + +
(一)需求分析:
本程序主要解决的是: 编写程序对八皇后问题进行求解:在8行8列的棋盘上放置8个皇后,使任一个皇后都不能吃掉其他的7个皇后(注:皇后可吃掉与她处于同行或同列或同一对角线上的其他棋子),并将结果以某种方式显示出来。原文请找腾讯752018766优,文-论'文.网http://www.youerw.com/
(二)概要分析:
和16题差不多,应用回溯算法,利用递归实现。
(三)详细分析
void solve(int i,bool& ok)这个主要的解决方法,需要不断回溯查看是否有冲突的皇后位置的放置。
(四)调试分析:
开始设计出现部分不规范的问题输出时不容易看懂后来改过来了。这个实验比较顺利的完成。
(五)用户使用说明:
使用者按照要求输入棋盘格数,确定就可以了,在这说明一点如果输入的个数过大程序可能需要一段时间来运算。
(优)测试结果:
(七)源程序:见上传源程序提高题17.cpp
(八)编程体会:
主要目的是看自己对递归的把握程度如何。加深对递归的理解/*************************************************
Copyright (C), 2008
File name: 软件设计普通题17(17.cpp)
Author: 计06-1 高战
Description:
Others: ....
Function List: // 主要函数列表,每条记录应包括函数名及功能简要说明
void print() //打印结果
void solve(int i,bool& ok) //解决方法
History:
<author> <time> <version > <desc>
*****************************************************/
#include<iostream>
#include<iomanip>
using namespace std;
int LineNum[20],n,t; //LineNum[i]表示放皇后第i行,其值为列数 n为解的种数 t为矩阵的行和列数
bool a[20], b[40], c[40]; //a[i]为true表示第i行上尚未放皇后 b[i]为true c[i]为true 表示第i条 斜对角线 反对角线 上尚未放皇后
void print() //打印结果
{
for(int k=1;k<t+1;k++) //打印坐标1826{