8皇后问题的解法实例代码

时间:2021-05-21

复制代码 代码如下:
#include <stdio.h>

#define MAX 200
#define Empty 0
#define Full 1
#define N 8

unsigned char qipan[N][N][N]={MAX};//初始化8张棋盘表示每下一步的
void input(int i);
int count = 0;

int main()
{
input(0);
getchar();
return 0;
}
void input(int i)
{
int x=0,y=0;
int p=0,q=0;
int flag = 0;
//初始化当前棋盘
if(i!=0)
{
for(x=0;x<N;x++)
{
for(y=0;y<N;y++)
{
qipan[i][x][y] = qipan[i-1][x][y];
}
}
}
else
{
for(x=0;x<N;x++)
{
for(y=0;y<N;y++)
{
qipan[i][x][y] = MAX;
}
}
}
//递归结束
if(i==N)
{
count++;
for(x=0;x<N;x++)
{
for(y=0;y<N;y++)
{
printf("%d ",qipan[i-1][x][y]);
}
printf("\n");
}
printf("%d\n",count);
return;
}

for(y=0;y<N;y++)
{
//找到空位
if(qipan[i][i][y]==MAX)
{
//另其为1
qipan[i][i][y] = 1;
//前后左右上下都置为0
for(p=0;p<N;p++)
{
for(q=0;q<N;q++)
{
if(q==y||p==i||(p-i)==(q-y)||(p-i)==(y-q))
if(qipan[i][p][q] == MAX)
qipan[i][p][q] = 0;
}
}
if(flag != -1)
{
//找下一个
input(i+1);
}
//将棋盘变回本层原样
for(p=0;p<N;p++)
{
for(q=0;q<N;q++)
{
if(i!=0)
qipan[i][p][q] = qipan[i-1][p][q];
else
qipan[i][p][q] = MAX;
}
}
flag =0;
}
}
//找不到空位结束
return;
}

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章