首页 > 其他 > 详细

八皇后问题

时间:2015-03-25 23:38:19      阅读:312      评论:0      收藏:0      [点我收藏+]
//八皇后问题
//我们用第i个数字代表第i行
//我们用数组中的值来依次代表某个列
//这样我们就保证了行列不发生冲突,我们只用判断两个数字(皇后)是否在对角线上就行了
//代码实现如下:
#include<iostream>
using namespace std;

int count = 0;//统计满足条件的组合
void getEightQueenNum(int *eightQueen,int begin, int len)
{	
	if(eightQueen==NULL || len!=8)
	{
		return ;
	}

	if(begin == len-1)//当begin循环到最后一位时,递归程序退出,如果此时满足条件,则个数count加1
	{
		bool flag = true;
		for(int i=0; i<len; ++i)//这相当于求数组的排列组合
		{
			for(int j=i+1;j<len; ++j)
			{
				if(i-j==eightQueen[i]-eightQueen[j] ||  i-j==eightQueen[j]-eightQueen[i])//如果在对角线上,则不满足条件
				{
					flag = false;
					break;
				}
			}
		}
		if(flag)
		{
			++count;
		}
	}
	else//如果还没有到最后一个 那么继续递归
	{
		for(int i=begin; i<len; ++i)
		{
			swap(eightQueen[i], eightQueen[begin]);
			getEightQueenNum(eightQueen,begin+1, 8);
			swap(eightQueen[i], eightQueen[begin]);
		}
	}
}

int main()
{
	int eightQueen[8] = {0,1,2,3,4,5,6,7};
	getEightQueenNum(eightQueen, 0, 8);
	cout<<count<<endl;

	return 0;
}

八皇后问题

原文:http://blog.csdn.net/huai1693838234/article/details/44629263

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!