您的位置:首页 > 编程语言

八皇后问题

2012-11-12 21:13 260 查看
问题描述:~省略

实现算法:

// EightQueen.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;

//count为八个皇后
int count = 8;
//数组rst含义,下标代表行号,数组元素值为列号
//存储的是八个皇后的位置(i,a[i])
int rst[8] = {0};
//sum计算解决方案数目
int sum = 0;
//查看在n行是否可以放下一个皇后
//分析可知,若对于两个点(a,b)和(c,d)是不符合八皇后
//的排列方式,那么有|a-c|等于|b-d|(对角线),或者a等于c
//或者b等于d,归纳而言就是对于本题中的数组rst而言需要
//有rst[a]等于rst[c],所以对于place而言只要有这两个条件
//符合,那么这个置放就是非法的,返回false,否则返回true
bool place(int n)
{
for( int i=0; i<n; i++ )
if( abs(i-n)==abs(rst[i]-rst
) ||
rst[i]==rst
) return false;
return true;
}
//该函数是实现放置第n个皇后
void EightQueen(int n)
{
//已经放完,输出该种解决方案
if(n >= ::count)
{
cout << "第" << ++sum << "种方案:" << endl;
for(int i=0; i<::count; i++ )
cout << "(" << i << "," << rst[i] << "),";
cout << endl;
}
else
{
//对于第n行放第n个皇后,需要从
//该行的第一列遍历至最后一列
for(int i=0; i<::count; i++ )
{
//第n行放在地i列
rst
= i;
//若符合则放下一个皇后到下一行
if( place(n) ) EightQueen(n+1);
}
}

}

int _tmain(int argc, _TCHAR* argv[])
{
EightQueen(0);
cout << "共有" << sum << "种解决方案!" << endl;
getchar();
return 0;
}


运行结果:

第1种方案:
(0,0),(1,4),(2,7),(3,5),(4,2),(5,6),(6,1),(7,3),
第2种方案:
(0,0),(1,5),(2,7),(3,2),(4,6),(5,3),(6,1),(7,4),
第3种方案:
(0,0),(1,6),(2,3),(3,5),(4,7),(5,1),(6,4),(7,2),
第4种方案:
(0,0),(1,6),(2,4),(3,7),(4,1),(5,3),(6,5),(7,2),
第5种方案:
(0,1),(1,3),(2,5),(3,7),(4,2),(5,0),(6,6),(7,4),
第6种方案:
(0,1),(1,4),(2,6),(3,0),(4,2),(5,7),(6,5),(7,3),
第7种方案:
(0,1),(1,4),(2,6),(3,3),(4,0),(5,7),(6,5),(7,2),
第8种方案:
(0,1),(1,5),(2,0),(3,6),(4,3),(5,7),(6,2),(7,4),
第9种方案:
(0,1),(1,5),(2,7),(3,2),(4,0),(5,3),(6,6),(7,4),
第10种方案:
(0,1),(1,6),(2,2),(3,5),(4,7),(5,4),(6,0),(7,3),
第11种方案:
(0,1),(1,6),(2,4),(3,7),(4,0),(5,3),(6,5),(7,2),
第12种方案:
(0,1),(1,7),(2,5),(3,0),(4,2),(5,4),(6,6),(7,3),
第13种方案:
(0,2),(1,0),(2,6),(3,4),(4,7),(5,1),(6,3),(7,5),
第14种方案:
(0,2),(1,4),(2,1),(3,7),(4,0),(5,6),(6,3),(7,5),
第15种方案:
(0,2),(1,4),(2,1),(3,7),(4,5),(5,3),(6,6),(7,0),
第16种方案:
(0,2),(1,4),(2,6),(3,0),(4,3),(5,1),(6,7),(7,5),
第17种方案:
(0,2),(1,4),(2,7),(3,3),(4,0),(5,6),(6,1),(7,5),
第18种方案:
(0,2),(1,5),(2,1),(3,4),(4,7),(5,0),(6,6),(7,3),
第19种方案:
(0,2),(1,5),(2,1),(3,6),(4,0),(5,3),(6,7),(7,4),
第20种方案:
(0,2),(1,5),(2,1),(3,6),(4,4),(5,0),(6,7),(7,3),
第21种方案:
(0,2),(1,5),(2,3),(3,0),(4,7),(5,4),(6,6),(7,1),
第22种方案:
(0,2),(1,5),(2,3),(3,1),(4,7),(5,4),(6,6),(7,0),
第23种方案:
(0,2),(1,5),(2,7),(3,0),(4,3),(5,6),(6,4),(7,1),
第24种方案:
(0,2),(1,5),(2,7),(3,0),(4,4),(5,6),(6,1),(7,3),
第25种方案:
(0,2),(1,5),(2,7),(3,1),(4,3),(5,0),(6,6),(7,4),
第26种方案:
(0,2),(1,6),(2,1),(3,7),(4,4),(5,0),(6,3),(7,5),
第27种方案:
(0,2),(1,6),(2,1),(3,7),(4,5),(5,3),(6,0),(7,4),
第28种方案:
(0,2),(1,7),(2,3),(3,6),(4,0),(5,5),(6,1),(7,4),
第29种方案:
(0,3),(1,0),(2,4),(3,7),(4,1),(5,6),(6,2),(7,5),
第30种方案:
(0,3),(1,0),(2,4),(3,7),(4,5),(5,2),(6,6),(7,1),
第31种方案:
(0,3),(1,1),(2,4),(3,7),(4,5),(5,0),(6,2),(7,6),
第32种方案:
(0,3),(1,1),(2,6),(3,2),(4,5),(5,7),(6,0),(7,4),
第33种方案:
(0,3),(1,1),(2,6),(3,2),(4,5),(5,7),(6,4),(7,0),
第34种方案:
(0,3),(1,1),(2,6),(3,4),(4,0),(5,7),(6,5),(7,2),
第35种方案:
(0,3),(1,1),(2,7),(3,4),(4,6),(5,0),(6,2),(7,5),
第36种方案:
(0,3),(1,1),(2,7),(3,5),(4,0),(5,2),(6,4),(7,6),
第37种方案:
(0,3),(1,5),(2,0),(3,4),(4,1),(5,7),(6,2),(7,6),
第38种方案:
(0,3),(1,5),(2,7),(3,1),(4,6),(5,0),(6,2),(7,4),
第39种方案:
(0,3),(1,5),(2,7),(3,2),(4,0),(5,6),(6,4),(7,1),
第40种方案:
(0,3),(1,6),(2,0),(3,7),(4,4),(5,1),(6,5),(7,2),
第41种方案:
(0,3),(1,6),(2,2),(3,7),(4,1),(5,4),(6,0),(7,5),
第42种方案:
(0,3),(1,6),(2,4),(3,1),(4,5),(5,0),(6,2),(7,7),
第43种方案:
(0,3),(1,6),(2,4),(3,2),(4,0),(5,5),(6,7),(7,1),
第44种方案:
(0,3),(1,7),(2,0),(3,2),(4,5),(5,1),(6,6),(7,4),
第45种方案:
(0,3),(1,7),(2,0),(3,4),(4,6),(5,1),(6,5),(7,2),
第46种方案:
(0,3),(1,7),(2,4),(3,2),(4,0),(5,6),(6,1),(7,5),
第47种方案:
(0,4),(1,0),(2,3),(3,5),(4,7),(5,1),(6,6),(7,2),
第48种方案:
(0,4),(1,0),(2,7),(3,3),(4,1),(5,6),(6,2),(7,5),
第49种方案:
(0,4),(1,0),(2,7),(3,5),(4,2),(5,6),(6,1),(7,3),
第50种方案:
(0,4),(1,1),(2,3),(3,5),(4,7),(5,2),(6,0),(7,6),
第51种方案:
(0,4),(1,1),(2,3),(3,6),(4,2),(5,7),(6,5),(7,0),
第52种方案:
(0,4),(1,1),(2,5),(3,0),(4,6),(5,3),(6,7),(7,2),
第53种方案:
(0,4),(1,1),(2,7),(3,0),(4,3),(5,6),(6,2),(7,5),
第54种方案:
(0,4),(1,2),(2,0),(3,5),(4,7),(5,1),(6,3),(7,6),
第55种方案:
(0,4),(1,2),(2,0),(3,6),(4,1),(5,7),(6,5),(7,3),
第56种方案:
(0,4),(1,2),(2,7),(3,3),(4,6),(5,0),(6,5),(7,1),
第57种方案:
(0,4),(1,6),(2,0),(3,2),(4,7),(5,5),(6,3),(7,1),
第58种方案:
(0,4),(1,6),(2,0),(3,3),(4,1),(5,7),(6,5),(7,2),
第59种方案:
(0,4),(1,6),(2,1),(3,3),(4,7),(5,0),(6,2),(7,5),
第60种方案:
(0,4),(1,6),(2,1),(3,5),(4,2),(5,0),(6,3),(7,7),
第61种方案:
(0,4),(1,6),(2,1),(3,5),(4,2),(5,0),(6,7),(7,3),
第62种方案:
(0,4),(1,6),(2,3),(3,0),(4,2),(5,7),(6,5),(7,1),
第63种方案:
(0,4),(1,7),(2,3),(3,0),(4,2),(5,5),(6,1),(7,6),
第64种方案:
(0,4),(1,7),(2,3),(3,0),(4,6),(5,1),(6,5),(7,2),
第65种方案:
(0,5),(1,0),(2,4),(3,1),(4,7),(5,2),(6,6),(7,3),
第66种方案:
(0,5),(1,1),(2,6),(3,0),(4,2),(5,4),(6,7),(7,3),
第67种方案:
(0,5),(1,1),(2,6),(3,0),(4,3),(5,7),(6,4),(7,2),
第68种方案:
(0,5),(1,2),(2,0),(3,6),(4,4),(5,7),(6,1),(7,3),
第69种方案:
(0,5),(1,2),(2,0),(3,7),(4,3),(5,1),(6,6),(7,4),
第70种方案:
(0,5),(1,2),(2,0),(3,7),(4,4),(5,1),(6,3),(7,6),
第71种方案:
(0,5),(1,2),(2,4),(3,6),(4,0),(5,3),(6,1),(7,7),
第72种方案:
(0,5),(1,2),(2,4),(3,7),(4,0),(5,3),(6,1),(7,6),
第73种方案:
(0,5),(1,2),(2,6),(3,1),(4,3),(5,7),(6,0),(7,4),
第74种方案:
(0,5),(1,2),(2,6),(3,1),(4,7),(5,4),(6,0),(7,3),
第75种方案:
(0,5),(1,2),(2,6),(3,3),(4,0),(5,7),(6,1),(7,4),
第76种方案:
(0,5),(1,3),(2,0),(3,4),(4,7),(5,1),(6,6),(7,2),
第77种方案:
(0,5),(1,3),(2,1),(3,7),(4,4),(5,6),(6,0),(7,2),
第78种方案:
(0,5),(1,3),(2,6),(3,0),(4,2),(5,4),(6,1),(7,7),
第79种方案:
(0,5),(1,3),(2,6),(3,0),(4,7),(5,1),(6,4),(7,2),
第80种方案:
(0,5),(1,7),(2,1),(3,3),(4,0),(5,6),(6,4),(7,2),
第81种方案:
(0,6),(1,0),(2,2),(3,7),(4,5),(5,3),(6,1),(7,4),
第82种方案:
(0,6),(1,1),(2,3),(3,0),(4,7),(5,4),(6,2),(7,5),
第83种方案:
(0,6),(1,1),(2,5),(3,2),(4,0),(5,3),(6,7),(7,4),
第84种方案:
(0,6),(1,2),(2,0),(3,5),(4,7),(5,4),(6,1),(7,3),
第85种方案:
(0,6),(1,2),(2,7),(3,1),(4,4),(5,0),(6,5),(7,3),
第86种方案:
(0,6),(1,3),(2,1),(3,4),(4,7),(5,0),(6,2),(7,5),
第87种方案:
(0,6),(1,3),(2,1),(3,7),(4,5),(5,0),(6,2),(7,4),
第88种方案:
(0,6),(1,4),(2,2),(3,0),(4,5),(5,7),(6,1),(7,3),
第89种方案:
(0,7),(1,1),(2,3),(3,0),(4,6),(5,4),(6,2),(7,5),
第90种方案:
(0,7),(1,1),(2,4),(3,2),(4,0),(5,6),(6,3),(7,5),
第91种方案:
(0,7),(1,2),(2,0),(3,5),(4,1),(5,4),(6,6),(7,3),
第92种方案:
(0,7),(1,3),(2,0),(3,2),(4,5),(5,1),(6,6),(7,4),
共有92种解决方案!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息