N皇后问题的递归算法求解:
/*
递归算法求解N皇后问题
*/
#include<iostream>
#include<vector>
using namespace std;
int Num=0;
void check(int i,vector<bool>C,vector<bool>R,vector<bool>L,vector<int>Queen,unsigned N)
{
int j;
int k;
for(j=1;j<=N;j++)
{
if((C[j]==true)&&(R[i+j]==true)&&(L[i-j+N+1]==true))
{
Queen[i]=j;
C[j]=false;
L[i-j+N+1]=false;
R[i+j]=false;
if(i<N)
{
check(i+1,C,R,L,Queen,N);
}
else
{
Num++;
cout<<"方案"<<Num<<":"<<"\t";
for(k=1;k<=N;k++)
cout<<k<<"行"<<Queen[k]<<"列"<<"\t";
cout<<endl;
}
C[j]=true;
L[i-j+N+1]=true;
R[i+j]=true;
}
}
}
int main()
{
int Num=0;
unsigned N;
cout<<"Which queens do you want?Please input a nunmber:(N>4) "<<endl;
cin>>N;
vector<int>Queen(N+1);
vector<bool>C(N+1);
vector<bool>L(N*2+1);
vector<bool>R(N*2+1);
int Normalize=N+1;
cout<<"------------Options-----------"<<endl;
int i;
for(i=1;i<N+1;i++)
C[i]=true;
for(i=0;i<N*2+1;i++)
L[i]=R[i]=true;
check(1,C,R,L,Queen,N);
return 0;
}
测试运行结果:
你想要几皇后呢@我~