搜索之八皇后问题
来源:互联网 发布:淘宝化妆品是真的吗 编辑:程序博客网 时间:2024/05/17 04:30
1700:八皇后问题
- 查看
- 提交
- 统计
- 提问
- 总时间限制:
- 10000ms
- 内存限制:
- 65536kB
- 描述
- 在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。
- 输入
- 无输入。
- 输出
- 按给定顺序和格式输出所有八皇后问题的解(见Sample Output)。
- 样例输入
- 样例输出
No. 11 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 No. 21 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 No. 31 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 ......
思路:把行,列,左右对角线分别令为矩阵,令一个二维矩阵遍历,然后从第一个开始搜索
写dfs函数的时候如果传入的数字大于8,二维矩阵都输出0。数字小于8的时候,当他的行,列,左右对角线都等于1的时候
二维矩阵为1,并继续下一个搜索dfs(x+1),二维矩阵重新赋值为0,行列左右对角线重新赋值为1.
#include<cstdio>#include<cstring>int ma[50][50];bool h[20],l[20],zx[20],yx[20];int s=0,js=0;void dfs(int x){if(x>8)//没有条件满足 { printf("No. %d\n",++s); for(int i=1;i<=8;i++) { for(int j=1;j<=8;j++) { printf("%d ",ma[i][j]);//输出所有都是0 } printf("\n"); } }else//满足条件 { for(int y=1;y<=8;y++) { if(h[y]==1&&l[x]==1&&zx[y-x+8]==1&&yx[y+x]==1) {//行,列,左右对角线都等于1 ma[y][x]=1; h[y]=l[x]=zx[y-x+8]=yx[y+x]=0; dfs(x+1);//继续进行下一列 ma[y][x]=0;//重新赋值为0 h[y]=l[x]=zx[y-x+8]=yx[y+x]=1;//重新赋值为1 } }}}int main(){memset(h,1,sizeof(h));//行 memset(l,1,sizeof(l));//列 memset(zx,1,sizeof(zx));//左对角线 memset(yx,1,sizeof(yx));//右对角线 memset(ma,0,sizeof(ma));//矩阵 dfs(1);return 0;}
1756:八皇后
- 查看
- 提交
- 统计
- 提问
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
- 会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。
对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2...b8,其中bi为相应摆法中第i行皇后所处的列数。已经知道8皇后问题一共有92组解(即92个不同的皇后串)。
给出一个数b,要求输出第b个串。串的比较是这样的:皇后串x置于皇后串y之前,当且仅当将x视为整数时比y小。 - 输入
- 第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数b(1 <= b <= 92)
- 输出
- 输出有n行,每行输出对应一个输入。输出应是一个正整数,是对应于b的皇后串。
- 样例输入
2192
- 样例输出
1586372484136275
#include<cstdio>#include<iostream>using namespace std;int f[10],d[100];//八个皇后的位置int i,n,t,tot; bool a[10],b[20],c[20];//各个位置没有皇后void p(){tot++;for(int i=1;i<=8;i++)d[tot]=d[tot]*10+f[i];//这是一个八位数}void dfs(int x){for(int i=1;i<=8;i++) if(a[i]==0&&b[i+x]==0&&c[x-i+7]==0)//a[i]也可能是行也可能是列,{ //b[i+x]==0是对角线没数,c[x-i+7]==0是相交的对角线上没数。a[i]=b[i+x]=c[x-i+7]=1;f[x]=i;if(x==8)p();else search(x+1);a[i]=b[i+x]=c[x-i+7]=0;}}int main(){dfs(1);cin>>n;for(i=1;i<=n;i++){cin>>t;cout<<d[t]<<endl;}return 0;}
0 0
- 搜索之八皇后问题
- 八皇后问题 递归搜索
- 八皇后问题之二(不需搜索范围)
- C++搜索与回溯算法之八皇后问题
- 数据结构之八皇后问题
- 算法之八皇后问题
- Python之八皇后问题
- 数据结构之八皇后问题
- 八皇后问题之二
- 递归之八皇后问题
- 八皇后问题_____递归线性搜索
- 搜索算法-讲解[八皇后问题]
- 局部搜索思想求解八皇后问题
- 八皇后问题之一(枚举+搜索)
- 八皇后问题与深度优先搜索
- //回溯法搜索八皇后问题
- 八皇后问题深度遍历搜索
- 搜索之N皇后问题
- HTML5下服务器与客户端的4种通信方式
- 小鑫去爬山
- Xml与string互转
- windows部署tomcat项目(4)
- 端到端语音识别(三) Sequence to Sequence and Attention
- 搜索之八皇后问题
- Android Volley获取数据显示乱码的问题
- Git命令集合
- LeetCode18. 4Sum
- javascript学习思维导图
- Fisher-exact test和富集分析
- 机器人仿真 软件 V-REP 入门教程 (三)
- 全民热议“10万彩礼结不了婚”的背后,百合网做了什么?
- ionic2修改默认首页,根页面