您的位置:首页 > 其它

八皇后问题使用排列的方法递归解决

2014-06-25 15:19 197 查看
#include<iostream>
using namespace std;
const int N=8;
int count=0;
void printQueen(int a[],int len)
{
	//输出解
	for(int i=0;i<len;++i)
	{
		for(int j=0;j<len;j++)
		{
			if(a[i]==j+1)
				cout<<"●";
			else
				cout<<"□";
		}
		cout<<endl;
	}
}
void Queen(int a[],int len,int begin)
{
	//解函数,对数组元素排列
	if(begin==len-1)
	{
		bool solve=true;
		for(int i=0;i<len-1;i++)
		{
			for(int j=i+1;j<len;j++)
			{
				if(a[i]-a[j]==i-j || a[i]-a[j]==j-i)
				{
					//判断是否在同一对角线
					solve=false;
					break;
				}

			}
			if(solve==false)
				break;
		}
		if(solve)
		{
			count++;
			cout<<"第"<<count<<"种解:";
			for(int i=0;i<len;i++)
				cout<<a[i]<<' ';
			cout<<endl;
			printQueen(a,len);
			
		}
		return;
	}
	//数组排列,递归
	for(int i=begin;i<len;i++)
	{
		int tmp=a[i];
		a[i]=a[begin];
		a[begin]=tmp;
		Queen(a,len,begin+1);
		tmp=a[i];
		a[i]=a[begin];
		a[begin]=tmp;
	}
}
void Queen(int a[],int len)
{
	if(a)
		Queen(a,len,0);
}
int main(void)
{
	int queen
;
	for(int i=0;i<N;i++)
		queen[i]=i+1;
	Queen(queen,N);
  return 0;
}





                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: