八皇后问题,任意两个皇后都不能处于同一行、同一列或同一斜线上。
在8x8的格子上,我们可以约定每一个皇后都占一行,这样就不会出现行冲突。任何在一次将一个皇后放在一列上,判断是否与前面的皇后有冲突,直到八个皇后都没有冲突,算一次。
#include <stdio.h>
#define NUM 8
int queen[NUM] = {0};//用来存储皇后的列数
int Queen(int n)
{
if(n >= NUM)
{
return 1;
}
int i,j;
int flat = 0;
int count = 0;
for(i = 0;i < NUM;i++)//NUM代表NUM列
{
flat = 0;
queen[n] = i;//将第n为皇后放在第i列
for(j = 0;j < n;j++)//检查有没有与前n-1个皇后有冲突
{
if(queen[j] == i || queen[j] - i == n - j || i - queen[j] == n-j)
{
flat = 1;
break;
}
}
if(flat == 1)//若为1,证明该列与前面的皇后的位置有冲突。
{
continue;
}
//第n个皇后的位置确定下来了,继续排第n+1个皇后的位置,
//统计第n个皇后放在第i列时剩下的8-n个皇后有多少中排法。
count += Queen(n+1);
}
return count;
}
int main()
{
int count = Queen(0);
printf("%d\n",count);
return 0;
}
>>
1、C语言实现汉诺塔
2、六种常见的排序算法
3、C语言实现24点游戏算法