皇后问题求解:在n*n棋盘上放置n个皇后,这些皇后中间任意两个皇后不能在同一行、同一列、同一对角线上(包括主、副对角线),如果有解则输出所有合法的解。
(1)用递归法实现
#include<iostream.h>
void Try(int i,int n,int *&a,int *&b,int *&c,int *&x)
//等价写法void Try(int i,int n,int a[],int b[],int c[],int x[])
/*前i-1个皇后已放置后,为第i个皇后选择合适的位置,a用于表示某列是否放置有皇后,b表示某条主对角线是否放置有皇后,cb表示某条副对角线是否放置有皇后*/
{
void OutSolution(int n,int *x);//函数原型声明
if(i>n)
{
OutSolution(n,x); //i>n表示第1--n个皇后已放置好
}
else
{
for(int j=1;j<=n;j++)//第i个皇后所放置的列
if(a[j]==-1&&b[i+j]==-1&&c[i-j+n]==-1)
/*如果位置(i,j)所放置的列,对角线没有放置有皇后,则在
位置(i,j)放置第i个皇后*/
{
a[j]=1;b[i+j]=1;c[