八皇后问题
来源:互联网 发布:魔女的条件知乎 编辑:程序博客网 时间:2024/06/05 11:12
/*开一个数组pxy[20],若皇后在map[x][y]放下就pxy[y-x+n]=1,,在拿走皇后时就pxy[y-x+n]=0+n是为了防止数组越界*/
#include<iostream>#include<cstdio>using namespace std;int map[20][20],n,px[20],pxy[20],px_y[40],ans[20],ansnum; void search(int x)//search函数,状态就是行。 { if(x==n)//之前在接龙题见过,就是在循环中i<n但在函数里面还有一个 //到达递归出口,得到一个新的方案,方案数+1; //if语句判断x==n; { if(ansnum<3)//要求输出前三组,要加一个判断 { for(int tt=0;tt<n;tt++) cout<<ans[tt]+1<<" "; //map[][]从0,0写入,结果要加一 cout<<endl;//上面那行是个注意点,考试的时候勿忘细节! // 为什么 if(ansnum<3)在头上吗? /* 因为,search从一开始,如果ansnum小于3,所以先输出。 */ } ansnum++;//上面已解释 return; } /* 列从0到n-1开始搜索啊,(t为列!) !!!!以列为中心搜索 如果x,y,对角线都为零就是没走过的时候,把列设为已走过 行设为已走过,对角线也设为已走过。 注意:ans数组为记录答案的作用,有思考的韵味! 然后又进行了dfs搜索,然后变量重置(套路) */ for(int t=0;t<n;t++)//从0到n-1以列开始搜索! { if(px[t]==0&&pxy[t-x+n]==0&&px_y[t+x]==0) { //px[t]表示t列所在的行 map[x][t]=1; px[t]=1;pxy[t-x+n]=1;px_y[t+x]=1;//尝试理解! ans[x]=t;//记录答案 search(x+1);//搜索下一列 px[t]=0;pxy[t-x+n]=0;px_y[t+x]=0;//恢复 } }}int main(){ cin>>n; search(0);//从0开始search,个人觉得可以从1开始! cout<<ansnum;//输出答案 return 0;}
- 八皇后 n皇后 问题
- 八皇后N皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题(2)
- 八皇后问题(3)
- 八皇后问题
- 八皇后问题程序
- 浅谈八皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题求解
- 八皇后问题
- 八皇后问题
- 八皇后问题
- 日期类定义
- 16.Hadoop架构再探讨第1部分
- java无法调用webservice
- 如何使用GridView实现不同数量显示图片不同的大小
- 分数化小数(decimal)
- 八皇后问题
- C#Http服务器报HttpListener拒绝访问异常解决方法
- Vue自定义事件
- 阶乘取余打表,阶乘逆元打表
- CRC32和CRC8校验代码,C语言版
- 关于APUE 图8-8 孤儿进程例子
- 转发和重定向的区别
- 流行编程语言的详细对比(6)--对象建立和析构函数
- Linux下Tomcat发布项目报错:java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config