1queen[]
2
1queen[t]==queen[i]abs(queen[t]-queen[i])==abs(t-i)
vc6.0 c++
#include<iostream> #include<cstdio> #include<cmath> usingnamespace std; #define N 15 intsum=0; intn; intqueen[N]; boolplace(int t)//放置判断函数(判断将该皇后放置的这个位置与前方的其他皇后有无冲突) { for(int i=1;i<t;i++) if(abs(i-t)==abs(queen[i]-queen[t])||queen[i]==queen[t])//核心(利用坐标判断) return false; return true; } intsearch(int t)//查找函数(每一层)从第一层开始,也是递归的本体 { if(t>n&&n>0) sum++;//放置了n行 for(int i=1;i<=n;i++) { queen[t]=i;//将第t行的皇后位置确定为i if(place(t))//如果当这时与前方的皇后无冲突 search(t+1);//查找下一个 } return sum; } intmain() { while(~scanf("%d",&n))//多次测试 { sum=0;//每次将累计函数归零 printf("%d\n",search(1)); } return 0; }
文章来源: N皇后解题报告(14阶递归方式)