/*
n后问题
*/
#include <stdio.h>
#include <stdlib.h>
typedef int bool;
#define true 1
#define false 0
#define MAXSIZE 50
//皇后个数
int n;
//总数
int sum;
//解
int x[MAXSIZE];
//输入
void input();
//初始化
void init();
//判断是否可放
bool canPlace(int);
//回溯
void backtrack(int);
int main(void)
{
while (1)
{
input();
init();
backtrack(0);
printf("%d\n", sum);
}
return 0;
}
void input()
{
printf("please enter n:");
scanf("%d", &n);
}
void init()
{
int i = 0;
for (i = 0; i < n; ++i)
{
x[i] = 0;
}
sum = 0;
}
bool canPlace(int t)
{
int i = 0;
for (i = 0; i < t; ++i)
{
if ( x[i] == x[t] || (abs(x[i] - x[t]) == abs(i - t)) )
{
return false;
}
}
return true;
}
void backtrack(int t)
{
int i = 0;
int j = 0;
if (t >= n)
{
++sum;
for (j = 0; j < n; ++j)
{
printf("%d ", x[j]);
}
printf("\n");
}
else
{
for (i = 0; i < n; ++i)
{
x[t] = i;
if (canPlace(t))
{
backtrack(t + 1);
}
}
}
}
n后问题之一
最新推荐文章于 2023-07-05 01:05:33 发布