/*
N皇后问题
回溯法
2014-4-8 11:22:45
*/
#include <stdio.h>
int a[1000], data[1000], n;
bool check(int k){
for(int i = 1; i < k; ++i)
if(a[i] == a[k] || i + a[i] == k + a[k]
|| i - a[i] == k - a[k]) return 0;
return 1;
}
void backTrack(int k){
if(k > n){
for(int i = 1; i < k; ++i)
printf("%d ", a[i]);
printf("\n");
return;
}
for(int i = 1; i <= n; ++i){
a[k] = i;
if(check(k)){
data[k] = i;
backTrack(k + 1);
}
}
}
int main(){
scanf("%d", &n);
backTrack(1);
return 0;
}
N皇后问题 【回溯法】
最新推荐文章于 2025-06-05 16:31:51 发布