C语言 8皇后解法
【摘要】
//这个问题的原理是,在一个四成四的表格中,顺序去放皇后,一个一个格子去试,每种情况都走一遍,结果就出来了
#include #define MAX 200#define Empty 0#define Full 1#define N 8unsigned char qipan[N][N][N]={MAX};//初始化8张棋盘表示每下一步的v...
//这个问题的原理是,在一个四成四的表格中,顺序去放皇后,一个一个格子去试,每种情况都走一遍,结果就出来了
-
#include
-
-
#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();
-
return0;
-
}
-
void input(int i)
-
{
-
intx=0,y=0;
-
intp=0,q=0;
-
int flag =0;
-
//初始化当前棋盘
-
if(i!=0)
-
{
-
for(x=0;x
-
{
-
for(y=0;y
-
{
-
qipan[i][x][y] = qipan[i-1][x][y];
-
}
-
}
-
}
-
else
-
{
-
for(x=0;x
-
{
-
for(y=0;y
-
{
-
qipan[i][x][y] = MAX;
-
}
-
}
-
}
-
//递归结束
-
if(i==N)
-
{
-
count++;
-
for(x=0;x
-
{
-
for(y=0;y
-
{
-
printf("%d ",qipan[i-1][x][y]);
-
}
-
printf("\n");
-
}
-
printf("%d\n",count);
-
return;
-
}
-
-
for(y=0;y
-
{
-
//找到空位
-
if(qipan[i][i][y]==MAX)
-
{
-
//另其为1
-
qipan[i][i][y] = 1;
-
//前后左右上下都置为0
-
for(p=0;p
-
{
-
for(q=0;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
-
{
-
for(q=0;q
-
{
-
if(i!=0)
-
qipan[i][p][q] = qipan[i-1][p][q];
-
else
-
qipan[i][p][q] = MAX;
-
}
-
}
-
flag =0;
-
}
-
}
-
//找不到空位结束
-
return;
-
}
文章来源: czhenya.blog.csdn.net,作者:陈言必行,版权归原作者所有,如需转载,请联系作者。
原文链接:czhenya.blog.csdn.net/article/details/76091295
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)