8皇后问题的解法实例代码_C语言教程-查字典教程网
8皇后问题的解法实例代码
8皇后问题的解法实例代码
发布时间:2016-12-28 来源:查字典编辑
摘要:复制代码代码如下:#include#defineMAX200#defineEmpty0#defineFull1#defineN8unsign...

复制代码 代码如下:

#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("%dn",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;

}

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新C语言学习
    热门C语言学习
    编程开发子分类