标签:
1 8 5 0
1 92 10
#include <cstdio> #include <cstring> int ans, n; int an[11]; bool check(int k); void dfs(int k); int main(){ while(scanf("%d", &n) != EOF && n){ memset(an, 0, sizeof(an)); ans = 0; dfs(1); printf("%d\n", ans); } return 0; } bool check(int k){ for(int i = 1; i < k; ++i){ if(an[k] == an[i] || an[k]-an[i] == k-i || an[k]-an[i] == i-k){ return false; } } return true; } void dfs(int k){ if(k == n+1){ ++ans; return ; } for(int i = 1; i <= n; ++i){ an[k] = i; if(check(k)){ dfs(k+1); } } }
#include <cstdio> #include <cstring> int sum, n; //n作为输入 int ans[11], an[11]; //ans存放方案数 an存放相应列的皇后所在行 bool check(int k); //校验函数 void dfs(int k); //深搜函数 int main(){ for(int i = 1; i < 11; ++i) { //先将相应的方案数算出 n = i; memset(an, 0, sizeof(an)); sum = 0; //每一次都要赋初值 dfs(1); ans[i] = sum; //存放对应方案数 } while(scanf("%d", &n) != EOF && n){ printf("%d\n", ans[n]); } return 0; } bool check(int k){ for(int i = 1; i < k; ++i){ if(an[k] == an[i] || an[k]-an[i] == k-i || an[k]-an[i] == i-k){ return false; } } return true; } void dfs(int k){ if(k == n+1){ ++sum; return ; } for(int i = 1; i <= n; ++i){ an[k] = i; if(check(k)){ dfs(k+1); } } }
标签:
原文地址:http://blog.csdn.net/u012431590/article/details/45644573