C++技巧(递归和非递归的解法)
n皇后问题:在n*n格的棋盘上,放n个皇后,任意两个皇后不能在同一行,同一列,同一斜线上,求有几种摆法
#include ““
#include
#include
C++技巧(递归和非递归的解法)
n皇后问题:在n*n格的棋盘上,放n个皇后,任意两个皇后不能在同一行,同一列,同一斜线上,求有几种摆法
#include ““
#include
#include
using namespace std;
//非递归
void queen(int n)
{
int *c=new int [n];//记录列状态
int *d1=new int[2*n-1];//记录正对角线状态
int *d2=new int[2*n-1];//记录负对角线状态
int *lc=new int[n];//记录皇后在第n放的列数
int **Queen=new int *[n];//棋盘
for(int i=0;i=0)
{
while(column=0)
{
column=lc[line];
Queen[line][column]=0;
c[column]=0;
d1[line-column+n-1]=0;
d2[line+column]=0;
column++;
}
}
cout<<num<<”\t”<<count<<endl;;
}
//递归
void queen1(int i,int**Queen,int *a,int *d1,int *d2,int
for(iColumn=0;iColumn<n;iColumn++)
{
count++;
if(a[iColumn]==0
a[iColumn]=1;
d1[i-iColumn+n-1]=1;
d2[i+iColumn]=1;
if(i<n-1)
queen1(i+1,Queen,a,d1,d2,n,QueenNumber,count);
else
{
QueenNumber++;
/*
fstream outstuf;
(““,ios::out|ios::app);
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
outstuf<<Queen[i][j]<<“ “;
}
outstuf<<“\r\n“;
}
outstuf<<“\r\n“
C++技巧(递归和非递归的解法) 来自淘豆网m.daumloan.com转载请标明出处.