N皇后问题
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 38 Accepted Submission(s) : 29
Problem Description
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
你的任务是,对于给定的N,求出有多少种合法的放置方法。
你的任务是,对于给定的N,求出有多少种合法的放置方法。
Input
共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。
Output
共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。
Sample Input
1 8 5 0
Sample Output
1 92 10#include<stdio.h> int mark[20],a[20]; int m,n; void fun(int x) { int i,j,flag; if(x==n+1){ m++; return; } else{ for(i=1;i<=n;i++) { flag=1; mark[x]=i; for(j=1;j<x;j++) { if(mark[j]==i||(i-x==mark[j]-j)||(i+x==mark[j]+j)) { flag=0; break; } } if(flag) fun(x+1); } } } int main() { int q,i,b[20]; for(n=1;n<=10;n++) { m=0; fun(1); b[n]=m; } while(scanf("%d",&q),q) { printf("%d\n",b[q]); } return 0; }