n皇后问题

8皇后问题

个人信息:就读于燕大本科软件工程专业 目前大三;

本人博客:google搜索“cqs_2012”即可;

个人爱好:酷爱数据结构和算法,希望将来搞科研为人民作出自己的贡献

博客内容:n皇后问题

博客时间:2014-4-9

编程语言:C++

编程坏境:Windows 7 专业版 x64

编程工具:vs2008 32位编译器

制图工具:office 2010 ppt

引言

好久不见的system("pause") and  goto 又见面了,见到老朋友很开心。

题目

n皇后问题

思路

回溯算法,个人感觉和老鼠走迷宫有异曲同工之妙。

n皇后问题规则如下

每两个皇后棋子不能落在同一条直线上

解决算法 回溯算法

需要工具 栈

实验

程序截图如下

solution 如下

结果共有 92 ,solution 如下

solution 1
* O O O O O O O 
O O O O * O O O 
O O O O O O O * 
O O O O O * O O 
O O * O O O O O 
O O O O O O * O 
O * O O O O O O 
O O O * O O O O 
solution 2
* O O O O O O O 
O O O O O * O O 
O O O O O O O * 
O O * O O O O O 
O O O O O O * O 
O O O * O O O O 
O * O O O O O O 
O O O O * O O O 
solution 3
* O O O O O O O 
O O O O O O * O 
O O O * O O O O 
O O O O O * O O 
O O O O O O O * 
O * O O O O O O 
O O O O * O O O 
O O * O O O O O 
solution 4
* O O O O O O O 
O O O O O O * O 
O O O O * O O O 
O O O O O O O * 
O * O O O O O O 
O O O * O O O O 
O O O O O * O O 
O O * O O O O O 
solution 5
O * O O O O O O 
O O O * O O O O 
O O O O O * O O 
O O O O O O O * 
O O * O O O O O 
* O O O O O O O 
O O O O O O * O 
O O O O * O O O 
solution 6
O * O O O O O O 
O O O O * O O O 
O O O O O O * O 
* O O O O O O O 
O O * O O O O O 
O O O O O O O * 
O O O O O * O O 
O O O * O O O O 
solution 7
O * O O O O O O 
O O O O * O O O 
O O O O O O * O 
O O O * O O O O 
* O O O O O O O 
O O O O O O O * 
O O O O O * O O 
O O * O O O O O 
solution 8
O * O O O O O O 
O O O O O * O O 
* O O O O O O O 
O O O O O O * O 
O O O * O O O O 
O O O O O O O * 
O O * O O O O O 
O O O O * O O O 
solution 9
O * O O O O O O 
O O O O O * O O 
O O O O O O O * 
O O * O O O O O 
* O O O O O O O 
O O O * O O O O 
O O O O O O * O 
O O O O * O O O 
solution 10
O * O O O O O O 
O O O O O O * O 
O O * O O O O O 
O O O O O * O O 
O O O O O O O * 
O O O O * O O O 
* O O O O O O O 
O O O * O O O O 
solution 11
O * O O O O O O 
O O O O O O * O 
O O O O * O O O 
O O O O O O O * 
* O O O O O O O 
O O O * O O O O 
O O O O O * O O 
O O * O O O O O 
solution 12
O * O O O O O O 
O O O O O O O * 
O O O O O * O O 
* O O O O O O O 
O O * O O O O O 
O O O O * O O O 
O O O O O O * O 
O O O * O O O O 
solution 13
O O * O O O O O 
* O O O O O O O 
O O O O O O * O 
O O O O * O O O 
O O O O O O O * 
O * O O O O O O 
O O O * O O O O 
O O O O O * O O 
solution 14
O O * O O O O O 
O O O O * O O O 
O * O O O O O O 
O O O O O O O * 
* O O O O O O O 
O O O O O O * O 
O O O * O O O O 
O O O O O * O O 
solution 15
O O * O O O O O 
O O O O * O O O 
O * O O O O O O 
O O O O O O O * 
O O O O O * O O 
O O O * O O O O 
O O O O O O * O 
* O O O O O O O 
solution 16
O O * O O O O O 
O O O O * O O O 
O O O O O O * O 
* O O O O O O O 
O O O * O O O O 
O * O O O O O O 
O O O O O O O * 
O O O O O * O O 
solution 17
O O * O O O O O 
O O O O * O O O 
O O O O O O O * 
O O O * O O O O 
* O O O O O O O 
O O O O O O * O 
O * O O O O O O 
O O O O O * O O 
solution 18
O O * O O O O O 
O O O O O * O O 
O * O O O O O O 
O O O O * O O O 
O O O O O O O * 
* O O O O O O O 
O O O O O O * O 
O O O * O O O O 
solution 19
O O * O O O O O 
O O O O O * O O 
O * O O O O O O 
O O O O O O * O 
* O O O O O O O 
O O O * O O O O 
O O O O O O O * 
O O O O * O O O 
solution 20
O O * O O O O O 
O O O O O * O O 
O * O O O O O O 
O O O O O O * O 
O O O O * O O O 
* O O O O O O O 
O O O O O O O * 
O O O * O O O O 
solution 21
O O * O O O O O 
O O O O O * O O 
O O O * O O O O 
* O O O O O O O 
O O O O O O O * 
O O O O * O O O 
O O O O O O * O 
O * O O O O O O 
solution 22
O O * O O O O O 
O O O O O * O O 
O O O * O O O O 
O * O O O O O O 
O O O O O O O * 
O O O O * O O O 
O O O O O O * O 
* O O O O O O O 
solution 23
O O * O O O O O 
O O O O O * O O 
O O O O O O O * 
* O O O O O O O 
O O O * O O O O 
O O O O O O * O 
O O O O * O O O 
O * O O O O O O 
solution 24
O O * O O O O O 
O O O O O * O O 
O O O O O O O * 
* O O O O O O O 
O O O O * O O O 
O O O O O O * O 
O * O O O O O O 
O O O * O O O O 
solution 25
O O * O O O O O 
O O O O O * O O 
O O O O O O O * 
O * O O O O O O 
O O O * O O O O 
* O O O O O O O 
O O O O O O * O 
O O O O * O O O 
solution 26
O O * O O O O O 
O O O O O O * O 
O * O O O O O O 
O O O O O O O * 
O O O O * O O O 
* O O O O O O O 
O O O * O O O O 
O O O O O * O O 
solution 27
O O * O O O O O 
O O O O O O * O 
O * O O O O O O 
O O O O O O O * 
O O O O O * O O 
O O O * O O O O 
* O O O O O O O 
O O O O * O O O 
solution 28
O O * O O O O O 
O O O O O O O * 
O O O * O O O O 
O O O O O O * O 
* O O O O O O O 
O O O O O * O O 
O * O O O O O O 
O O O O * O O O 
solution 29
O O O * O O O O 
* O O O O O O O 
O O O O * O O O 
O O O O O O O * 
O * O O O O O O 
O O O O O O * O 
O O * O O O O O 
O O O O O * O O 
solution 30
O O O * O O O O 
* O O O O O O O 
O O O O * O O O 
O O O O O O O * 
O O O O O * O O 
O O * O O O O O 
O O O O O O * O 
O * O O O O O O 
solution 31
O O O * O O O O 
O * O O O O O O 
O O O O * O O O 
O O O O O O O * 
O O O O O * O O 
* O O O O O O O 
O O * O O O O O 
O O O O O O * O 
solution 32
O O O * O O O O 
O * O O O O O O 
O O O O O O * O 
O O * O O O O O 
O O O O O * O O 
O O O O O O O * 
* O O O O O O O 
O O O O * O O O 
solution 33
O O O * O O O O 
O * O O O O O O 
O O O O O O * O 
O O * O O O O O 
O O O O O * O O 
O O O O O O O * 
O O O O * O O O 
* O O O O O O O 
solution 34
O O O * O O O O 
O * O O O O O O 
O O O O O O * O 
O O O O * O O O 
* O O O O O O O 
O O O O O O O * 
O O O O O * O O 
O O * O O O O O 
solution 35
O O O * O O O O 
O * O O O O O O 
O O O O O O O * 
O O O O * O O O 
O O O O O O * O 
* O O O O O O O 
O O * O O O O O 
O O O O O * O O 
solution 36
O O O * O O O O 
O * O O O O O O 
O O O O O O O * 
O O O O O * O O 
* O O O O O O O 
O O * O O O O O 
O O O O * O O O 
O O O O O O * O 
solution 37
O O O * O O O O 
O O O O O * O O 
* O O O O O O O 
O O O O * O O O 
O * O O O O O O 
O O O O O O O * 
O O * O O O O O 
O O O O O O * O 
solution 38
O O O * O O O O 
O O O O O * O O 
O O O O O O O * 
O * O O O O O O 
O O O O O O * O 
* O O O O O O O 
O O * O O O O O 
O O O O * O O O 
solution 39
O O O * O O O O 
O O O O O * O O 
O O O O O O O * 
O O * O O O O O 
* O O O O O O O 
O O O O O O * O 
O O O O * O O O 
O * O O O O O O 
solution 40
O O O * O O O O 
O O O O O O * O 
* O O O O O O O 
O O O O O O O * 
O O O O * O O O 
O * O O O O O O 
O O O O O * O O 
O O * O O O O O 
solution 41
O O O * O O O O 
O O O O O O * O 
O O * O O O O O 
O O O O O O O * 
O * O O O O O O 
O O O O * O O O 
* O O O O O O O 
O O O O O * O O 
solution 42
O O O * O O O O 
O O O O O O * O 
O O O O * O O O 
O * O O O O O O 
O O O O O * O O 
* O O O O O O O 
O O * O O O O O 
O O O O O O O * 
solution 43
O O O * O O O O 
O O O O O O * O 
O O O O * O O O 
O O * O O O O O 
* O O O O O O O 
O O O O O * O O 
O O O O O O O * 
O * O O O O O O 
solution 44
O O O * O O O O 
O O O O O O O * 
* O O O O O O O 
O O * O O O O O 
O O O O O * O O 
O * O O O O O O 
O O O O O O * O 
O O O O * O O O 
solution 45
O O O * O O O O 
O O O O O O O * 
* O O O O O O O 
O O O O * O O O 
O O O O O O * O 
O * O O O O O O 
O O O O O * O O 
O O * O O O O O 
solution 46
O O O * O O O O 
O O O O O O O * 
O O O O * O O O 
O O * O O O O O 
* O O O O O O O 
O O O O O O * O 
O * O O O O O O 
O O O O O * O O 
solution 47
O O O O * O O O 
* O O O O O O O 
O O O * O O O O 
O O O O O * O O 
O O O O O O O * 
O * O O O O O O 
O O O O O O * O 
O O * O O O O O 
solution 48
O O O O * O O O 
* O O O O O O O 
O O O O O O O * 
O O O * O O O O 
O * O O O O O O 
O O O O O O * O 
O O * O O O O O 
O O O O O * O O 
solution 49
O O O O * O O O 
* O O O O O O O 
O O O O O O O * 
O O O O O * O O 
O O * O O O O O 
O O O O O O * O 
O * O O O O O O 
O O O * O O O O 
solution 50
O O O O * O O O 
O * O O O O O O 
O O O * O O O O 
O O O O O * O O 
O O O O O O O * 
O O * O O O O O 
* O O O O O O O 
O O O O O O * O 
solution 51
O O O O * O O O 
O * O O O O O O 
O O O * O O O O 
O O O O O O * O 
O O * O O O O O 
O O O O O O O * 
O O O O O * O O 
* O O O O O O O 
solution 52
O O O O * O O O 
O * O O O O O O 
O O O O O * O O 
* O O O O O O O 
O O O O O O * O 
O O O * O O O O 
O O O O O O O * 
O O * O O O O O 
solution 53
O O O O * O O O 
O * O O O O O O 
O O O O O O O * 
* O O O O O O O 
O O O * O O O O 
O O O O O O * O 
O O * O O O O O 
O O O O O * O O 
solution 54
O O O O * O O O 
O O * O O O O O 
* O O O O O O O 
O O O O O * O O 
O O O O O O O * 
O * O O O O O O 
O O O * O O O O 
O O O O O O * O 
solution 55
O O O O * O O O 
O O * O O O O O 
* O O O O O O O 
O O O O O O * O 
O * O O O O O O 
O O O O O O O * 
O O O O O * O O 
O O O * O O O O 
solution 56
O O O O * O O O 
O O * O O O O O 
O O O O O O O * 
O O O * O O O O 
O O O O O O * O 
* O O O O O O O 
O O O O O * O O 
O * O O O O O O 
solution 57
O O O O * O O O 
O O O O O O * O 
* O O O O O O O 
O O * O O O O O 
O O O O O O O * 
O O O O O * O O 
O O O * O O O O 
O * O O O O O O 
solution 58
O O O O * O O O 
O O O O O O * O 
* O O O O O O O 
O O O * O O O O 
O * O O O O O O 
O O O O O O O * 
O O O O O * O O 
O O * O O O O O 
solution 59
O O O O * O O O 
O O O O O O * O 
O * O O O O O O 
O O O * O O O O 
O O O O O O O * 
* O O O O O O O 
O O * O O O O O 
O O O O O * O O 
solution 60
O O O O * O O O 
O O O O O O * O 
O * O O O O O O 
O O O O O * O O 
O O * O O O O O 
* O O O O O O O 
O O O * O O O O 
O O O O O O O * 
solution 61
O O O O * O O O 
O O O O O O * O 
O * O O O O O O 
O O O O O * O O 
O O * O O O O O 
* O O O O O O O 
O O O O O O O * 
O O O * O O O O 
solution 62
O O O O * O O O 
O O O O O O * O 
O O O * O O O O 
* O O O O O O O 
O O * O O O O O 
O O O O O O O * 
O O O O O * O O 
O * O O O O O O 
solution 63
O O O O * O O O 
O O O O O O O * 
O O O * O O O O 
* O O O O O O O 
O O * O O O O O 
O O O O O * O O 
O * O O O O O O 
O O O O O O * O 
solution 64
O O O O * O O O 
O O O O O O O * 
O O O * O O O O 
* O O O O O O O 
O O O O O O * O 
O * O O O O O O 
O O O O O * O O 
O O * O O O O O 
solution 65
O O O O O * O O 
* O O O O O O O 
O O O O * O O O 
O * O O O O O O 
O O O O O O O * 
O O * O O O O O 
O O O O O O * O 
O O O * O O O O 
solution 66
O O O O O * O O 
O * O O O O O O 
O O O O O O * O 
* O O O O O O O 
O O * O O O O O 
O O O O * O O O 
O O O O O O O * 
O O O * O O O O 
solution 67
O O O O O * O O 
O * O O O O O O 
O O O O O O * O 
* O O O O O O O 
O O O * O O O O 
O O O O O O O * 
O O O O * O O O 
O O * O O O O O 
solution 68
O O O O O * O O 
O O * O O O O O 
* O O O O O O O 
O O O O O O * O 
O O O O * O O O 
O O O O O O O * 
O * O O O O O O 
O O O * O O O O 
solution 69
O O O O O * O O 
O O * O O O O O 
* O O O O O O O 
O O O O O O O * 
O O O * O O O O 
O * O O O O O O 
O O O O O O * O 
O O O O * O O O 
solution 70
O O O O O * O O 
O O * O O O O O 
* O O O O O O O 
O O O O O O O * 
O O O O * O O O 
O * O O O O O O 
O O O * O O O O 
O O O O O O * O 
solution 71
O O O O O * O O 
O O * O O O O O 
O O O O * O O O 
O O O O O O * O 
* O O O O O O O 
O O O * O O O O 
O * O O O O O O 
O O O O O O O * 
solution 72
O O O O O * O O 
O O * O O O O O 
O O O O * O O O 
O O O O O O O * 
* O O O O O O O 
O O O * O O O O 
O * O O O O O O 
O O O O O O * O 
solution 73
O O O O O * O O 
O O * O O O O O 
O O O O O O * O 
O * O O O O O O 
O O O * O O O O 
O O O O O O O * 
* O O O O O O O 
O O O O * O O O 
solution 74
O O O O O * O O 
O O * O O O O O 
O O O O O O * O 
O * O O O O O O 
O O O O O O O * 
O O O O * O O O 
* O O O O O O O 
O O O * O O O O 
solution 75
O O O O O * O O 
O O * O O O O O 
O O O O O O * O 
O O O * O O O O 
* O O O O O O O 
O O O O O O O * 
O * O O O O O O 
O O O O * O O O 
solution 76
O O O O O * O O 
O O O * O O O O 
* O O O O O O O 
O O O O * O O O 
O O O O O O O * 
O * O O O O O O 
O O O O O O * O 
O O * O O O O O 
solution 77
O O O O O * O O 
O O O * O O O O 
O * O O O O O O 
O O O O O O O * 
O O O O * O O O 
O O O O O O * O 
* O O O O O O O 
O O * O O O O O 
solution 78
O O O O O * O O 
O O O * O O O O 
O O O O O O * O 
* O O O O O O O 
O O * O O O O O 
O O O O * O O O 
O * O O O O O O 
O O O O O O O * 
solution 79
O O O O O * O O 
O O O * O O O O 
O O O O O O * O 
* O O O O O O O 
O O O O O O O * 
O * O O O O O O 
O O O O * O O O 
O O * O O O O O 
solution 80
O O O O O * O O 
O O O O O O O * 
O * O O O O O O 
O O O * O O O O 
* O O O O O O O 
O O O O O O * O 
O O O O * O O O 
O O * O O O O O 
solution 81
O O O O O O * O 
* O O O O O O O 
O O * O O O O O 
O O O O O O O * 
O O O O O * O O 
O O O * O O O O 
O * O O O O O O 
O O O O * O O O 
solution 82
O O O O O O * O 
O * O O O O O O 
O O O * O O O O 
* O O O O O O O 
O O O O O O O * 
O O O O * O O O 
O O * O O O O O 
O O O O O * O O 
solution 83
O O O O O O * O 
O * O O O O O O 
O O O O O * O O 
O O * O O O O O 
* O O O O O O O 
O O O * O O O O 
O O O O O O O * 
O O O O * O O O 
solution 84
O O O O O O * O 
O O * O O O O O 
* O O O O O O O 
O O O O O * O O 
O O O O O O O * 
O O O O * O O O 
O * O O O O O O 
O O O * O O O O 
solution 85
O O O O O O * O 
O O * O O O O O 
O O O O O O O * 
O * O O O O O O 
O O O O * O O O 
* O O O O O O O 
O O O O O * O O 
O O O * O O O O 
solution 86
O O O O O O * O 
O O O * O O O O 
O * O O O O O O 
O O O O * O O O 
O O O O O O O * 
* O O O O O O O 
O O * O O O O O 
O O O O O * O O 
solution 87
O O O O O O * O 
O O O * O O O O 
O * O O O O O O 
O O O O O O O * 
O O O O O * O O 
* O O O O O O O 
O O * O O O O O 
O O O O * O O O 
solution 88
O O O O O O * O 
O O O O * O O O 
O O * O O O O O 
* O O O O O O O 
O O O O O * O O 
O O O O O O O * 
O * O O O O O O 
O O O * O O O O 
solution 89
O O O O O O O * 
O * O O O O O O 
O O O * O O O O 
* O O O O O O O 
O O O O O O * O 
O O O O * O O O 
O O * O O O O O 
O O O O O * O O 
solution 90
O O O O O O O * 
O * O O O O O O 
O O O O * O O O 
O O * O O O O O 
* O O O O O O O 
O O O O O O * O 
O O O * O O O O 
O O O O O * O O 
solution 91
O O O O O O O * 
O O * O O O O O 
* O O O O O O O 
O O O O O * O O 
O * O O O O O O 
O O O O * O O O 
O O O O O O * O 
O O O * O O O O 
solution 92
O O O O O O O * 
O O O * O O O O 
* O O O O O O O 
O O * O O O O O 
O O O O O * O O 
O * O O O O O O 
O O O O O O * O 
O O O O * O O O 


代码

test.cpp(程序运行结果会保存在 huanghou.txt 文件里,请注意查看)

#include<iostream>
#include<utility>
#include<stack>
#include<fstream>
using namespace std;

// function: check huanghou
// input: a new 位置 with i and j ,and the stack( 值传递 )
// output: bool
// 功能:判断当前位置时候是皇后问题的答案
bool _check_huanghou( int i,int j,stack<std::pair<int,int>> result );

// function: output huanghou
// input: the result stack( 值传递 )
// output: void
// 功能:输出皇后问题的答案
void _OUTput_huanghou(stack<std::pair<int,int>> result,ofstream & writer);


// function: n 皇后问题
// input: n
// output: bool
// 功能:n皇后问题(回溯算法,application of stack)
void _Eight_huanghou(int n);

// function: main
int main()
{
	int n;
	cout<<"请输入皇后的个数"<<endl;
	while(cin>>n)
	{
		_Eight_huanghou(n);
		cout<<"请输入皇后的个数"<<endl;
	}
	system("pause");
	return 0;
}


// function: n 皇后问题
// input: n
// output: bool
// 功能:n皇后问题(回溯算法,application of stack)
void _Eight_huanghou(int n)
{
	ofstream writer;
	writer.open("huanghou.txt");
	writer.clear();
	
	stack<std::pair<int,int>> result  ;
	std::pair<int,int> top ;
	bool r = false;
	int number = 0 ;

	result.push(std::make_pair(0,0));
	while(! result.empty())
	{	
		top = result.top();
		if(top.first < n-1)
		{
			int j;
			// push stack
			for( j = 0;j<n;j++)
			{
				// check

				r = _check_huanghou( top.first+1,j,result );
				if(r == true)
				{
					result.push(std::make_pair(top.first+1,j));
					break;
				}
			}
			// pop stack
			if( j == n )
			{
				while( j == n && !result.empty())
				{
					A:
					top = result.top() ;
					result.pop() ;						
					for( j = top.second + 1; j<n; j++ )
					{
						r = _check_huanghou( top.first,j,result );
						if( r == true )
						{
							result.push(std::make_pair(top.first,j));
							break ;
						}
					}
				}
			}
		}
		// get the result;
		else
		{
			cout<<" one solution "<<++ number<<endl;
			writer<<"solution "<<number<<"\n";
			
			_OUTput_huanghou(result,writer);
			goto A;
		}
		
	}

	writer.close();
	//delete & result;
}


// function: check huanghou
// input: a new 位置 with i and j ,and the stack( 值传递 )
// output: bool
// 功能:判断当前位置时候是皇后问题的答案
bool _check_huanghou( int i,int j,stack<std::pair<int,int>> result )
{
	std::pair<int,int> top ;
	while(! result.empty())
	{
		top = result.top();
		result.pop();
		if(top.first == i || top.second == j || top.first - top.second == i - j || top.first + top.second == i+j )
		{
			return false;
		}
	}
	return true;
}


// function: output huanghou
// input: the result stack( 值传递 )
// output: void
// 功能:输出皇后问题的答案
void _OUTput_huanghou(stack<std::pair<int,int>> result,ofstream &writer)
{
	std::pair<int,int> top;
	int n = result.size();
	char ** data = new char*[n];
	for(int i=0;i<n;i++)
	{
		data[i] = new char[n];
		for(int j =0;j<n;j++)
		{
			data[i][j] = 'O';
		}
	}
	while(! result.empty())
	{
		top = result.top();
		data[top.first][top.second] = '*';
		result.pop();
	}
	for(int i = 0;i<n;i++)
	{
		for(int j =0;j<n;j++)
		{
			writer<<data[i][j]<<' ';
		}
		writer<<"\n";
	}
}


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值