|
发表于 2017-12-23 19:13:43
|
显示全部楼层
#include<stdio.h>
#include<math.h>
#define N 8
//n皇后、回溯法
int x[8+1];
int count = 0;
int judge(int k,int i)
{
for(int j = 1; j < k; j++)
{
if(x[j] == i || abs(i - x[j]) == abs(k - j))
{
//printf("%d不能再%d列",k,i);
return 0;
}
}
return 1;
}
int main(){
for(int i = 0; i <= N; i++) x[i] = 0;
int k = 1;
while(k > 0)
{
x[k]++;
//寻找位置
while(x[k] <= N && !judge(k,x[k])) x[k]++;
//分析情况
if(k == N && x[k] <= N)
{//完成查找、输出
for(int j = 1; j <= N; j++) printf("%d ",x[j]);
printf("\n");
count++;
}
else if(k < N && x[k] <= N)
{//当前皇后找到位置
k++;
}
else
{//找不到位置
x[k] = 0; k--;
}
}
printf("%d",count);
return 0;
}
|
|