标签:
1 8 5 0
1 92 10
#include<stdio.h> #include<math.h> int x[15];//x数组表示放在该列的哪个位置,下标表示列,值表示放置在第几行 int sum, n; bool place (int v) { int i; for(i=1;i<v;++i) { if(x[i] == x[v] || abs(x[i]-x[v])==abs(i-v))//如果在同一行,或在对角线方向(为什么这里不判断是否为同一列呢?主要是因为x数组表示放在该列的哪个位置) return 0; } return 1; } void backtrack(int v) { int i; if(v>n) //把最后一个皇后放置成功后 sum++; else { for(i=1;i<=n;++i) //找n个皇后 { x[v]=i; if(place(v)) { backtrack(v+1); } } } } int main() { int ans[15]; for(n = 1; n <= 10; ++n) { sum = 0; backtrack(1); ans[n] = sum; } while(scanf("%d",&n), n) { printf("%d\n",ans[n]); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/yuzhiwei1995/article/details/47259627