N皇后解题报告(14阶递归方式)

匿名 (未验证) 提交于 2019-12-03 00:21:02

n

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;  }

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!