最原始DFS ,n代表棋盘是n*n的
#include <cstdio> #include <iostream> #include <cstring> using namespace std ; int a[1000] ; int cnt,n ; void dfs(int cur) { if(cur == n) cnt++ ; else for(int i = 0 ;i<n ;i++) { int ok = 1 ; a[cur] = i ; for(int j = 0 ;j<cur ;j++) { if(a[j] == a[cur] || (a[j]+j==a[cur]+cur) || (a[j]-j==a[cur]-cur)) { ok = 0 ; break ; } } if(ok) { dfs(cur+1) ; } } } int main() { while(scanf("%d",&n)!=EOF) { cnt = 0 ; dfs(0) ; printf("%d\n",cnt) ; } }
原文地址:http://blog.csdn.net/u012566693/article/details/45226365