读书人

8皇后对角线不是有棋子//为什么0,0放一

发布时间: 2013-09-06 10:17:17 作者: rapoo

八皇后对角线不是有棋子//为什么0,0放一个,主对角线zxie = 3而不是2???
1 p p p //为什么0,0放一个,主对角线zxie = 3而不是2???
p p p p
p p p p // zxie = 3 是这一行吧???
p p p p



#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;
}


[解决办法]
1 p p p //为什么0,0放一个,主对角线zxie = 3而不是2???
p p p p
p p p p // zxie = 3 是这一行吧??? <---- 坐标从0开始, 这行当然是第二行, 所以zxie=3没错
p p p p

读书人网 >C++

热点推荐