1 8 5 0
1 92 10
#include <stdio.h> #define MAX 15 int n , ans = 0 ,res[MAX],map[MAX]; void DFS(int row) { if(row == n) { ans++ ; return ; } for(int i = 0 ; i < n ; ++i) { bool flag = false ; map[row] = i ; for(int j = 0 ; j < row ; ++j) { if(map[row]==map[j]||map[row]-row==map[j]-j||map[row]+row==map[j]+j) { flag = true ; break ; } } if(!flag) { DFS(row+1) ; } } } int main() { for(int i = 1 ; i <= 10 ; ++i) { n = i ; ans = 0 ; DFS(0) ; res[i] = ans ; } while(~scanf("%d",&n) && n) { printf("%d\n",res[n]) ; } return 0 ; }
原文:http://blog.csdn.net/lionel_d/article/details/44121329