八皇后问题是一个比较经典的算法问题。在看了别人的各种各样的程序算法之后。还是看不懂,最后我放弃了。看不懂那就自己推理吧。
其实八皇后问题最核心的还是使用递归,来计算。
以后再慢慢总结补充(^_^)
不啰嗦看代码
-
#include<stdio.h>
-
#include<stdlib.h >
-
-
#define M 8
-
-
int buff[M][M];
-
int sum=0;
-
-
void Clear_Buff(void)
-
{
-
int i,j;
-
for(i=0;i<M;i++)
-
for(j=0;j<M;j++)
-
buff[i][j] = 0;
-
}
-
-
void Disply(void)
-
{
-
int i,j;
-
-
printf("----------------------\n");
-
-
for(i=0;i<M;i++)
-
{
-
for(j=0;j<M;j++)
-
{
-
printf(" %d",buff[i][j]);
-
}
-
printf("\n");
-
}
-
printf("----------------------\n");
-
}
-
-
int Is_OK(int x, int y)
-
{
-
int i,j;
-
-
for(i=0;i<x;i++)
-
{
-
for(j=0;j<M;j++)
-
{
-
if(buff[i][j] ==1){
-
if(abs(i-x) == abs(j-y) || (j==y)){
-
return 0;
-
}
-
}
-
-
}
-
}
-
return 1;
-
}
-
-
void Search(int depth)
-
{
-
int i,j;
-
for(i=0;i<M;i++){
-
-
if(Is_OK(depth, i)){
-
if(depth == M-1)
-
{
-
sum++;
-
buff[depth][i] = 1;
-
printf("第%d种解法 \n",sum);
-
Disply();
-
buff[depth][i] = 0;
-
return ;
-
}
-
buff[depth][i] = 1;
-
Search(depth+1);
-
buff[depth][i] = 0;
-
}
-
-
}
-
}
-
-
void main(void)
-
{
-
-
printf("你好八皇后\n");
-
Clear_Buff();
-
Search(0);
-
printf("sum = %d\n",sum);
-
return ;
-
}
阅读(1243) | 评论(0) | 转发(0) |