手机
当前位置:查字典教程网 >编程开发 >C语言 >8皇后问题的解法实例代码
8皇后问题的解法实例代码
摘要:复制代码代码如下:#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;

}

【8皇后问题的解法实例代码】相关文章:

用C++实现队列的程序代码

简单的汉诺塔问题解法代码

C++ 字符串的反转五种方法实例

c语言 汉诺塔算法代码

关于STL中的map容器的一些总结

节序问题:解析大小的端判定

使用map实现单词转换的实例分析

方阵顺时针旋转的实现代码

linux c多线程编程实例代码

C语言栈顺序结构实现代码

精品推荐
分类导航