八皇后对角线判断//不了解。。。
八皇后对角线判断//不了解,N=5
递归 row = 2, 执行if(column[i]==0 && zxie[i-row+N-1]==0 && fxie[i+row]==0)
i=1时, zxie[1-2+5-1] && yxie[1+2] //怎么都是4呢。。。。
i=2时, zxie[2-2+5-1] && yxie[2+2] //怎么都是4呢。。。。
#include "stdafx.h"
#include "stdafx.h"
#include <iostream>
using namespace std;
#define MAX 15
char map[MAX][MAX];
int column[MAX];//标记:该行已经有皇后则为1,否则为0
int zxie[MAX];//标记:该主斜线已经有皇后则为1,否则为0
int fxie[MAX];//标记:该辅斜线已经有皇后则为1,否则为0
int N;int sum;void output(){
for(int i=0;i<N;++i)
{
for(int j=0;j<N;++j)
cout<<map[i][j];
// cout<<sum;
cout<<endl;
}
cout<<endl;
}
void queue8(int row)//形式参数是row行数
{
for(int i=0;i<N;i++)//列
{
if(column[i]==0 && zxie[i-row+N-1]==0 && fxie[i+row]==0)//不冲突
{
map[row][i]='@';
column[i]=1;
zxie[i-row+N-1]=1;
fxie[i+row]=1;
if(row<(N-1))
queue8(row+1);
else
{
output();
sum++;
}
//回溯
map[row][i]='*';
column[i]=0;
zxie[i-row+N-1]=0;
fxie[i+row]=0;
}
}
}
int main(){
while(cin>>N && N!=0)
{
memset(map, '*', sizeof(map));
memset(column, 0, sizeof(column));
memset(zxie, 0, sizeof(zxie));
memset(fxie, 0, sizeof(fxie));
sum=0;
queue8(0);
cout<<"总共有"<<sum<<"种摆法。"<<endl;
}
return 0;
}