dfs-1756:八皇后及1700:八皇后问题

news/2025/1/21 10:28:30/

总时间限制: 

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的皇后串。

样例输入

2
1
92

样例输出

15863724
84136275

参考代码:

#include<bits/stdc++.h>
using namespace std;
int t,a[10],b[10],c[20],d[20],f[100],n,m=0;
void print()
{int i,j;t++;for(i=1;i<=m;i++){if(t==f[i]){for(j=1;j<=8;j++)//枚举列号{cout<<a[j];}cout<<endl;}}
} 
void dfs(int i)
{int j;if(i>8)print();elsefor(j=1;j<=8;j++){if(b[j]==0&&c[i+j]==0&&d[i-j+7]==0)//如果可以放{a[i]=j;b[j]=1,c[i+j]=1,d[i-j+7]=1;//宣布占领dfs(i+1);//进一步递归b[j]=0,c[i+j]=0,d[i-j+7]=0;//回溯}}
}
int main()
{cin>>n;while(n--) cin>>f[++m];dfs(1);
}

总时间限制: 

10000ms

内存限制: 

65536kB

描述

在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。

输入

无输入。

输出

按给定顺序和格式输出所有八皇后问题的解(见Sample Output)。

样例输入

 

样例输出

No. 1
1 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. 2
1 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. 3
1 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 
No. 4
1 0 0 0 0 0 0 0 
0 0 0 0 1 0 0 0 
0 0 0 0 0 0 0 1 
0 0 0 0 0 1 0 0 
0 0 1 0 0 0 0 0 
0 0 0 0 0 0 1 0 
0 1 0 0 0 0 0 0 
0 0 0 1 0 0 0 0 
No. 5
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 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 
No. 6
0 0 0 1 0 0 0 0 
1 0 0 0 0 0 0 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 0 0 0 1 0 
0 0 1 0 0 0 0 0 
0 0 0 0 0 1 0 0 
No. 7
0 0 0 0 1 0 0 0 
1 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 1 
0 0 0 1 0 0 0 0 
0 1 0 0 0 0 0 0 
0 0 0 0 0 0 1 0 
0 0 1 0 0 0 0 0 
0 0 0 0 0 1 0 0 
No. 8
0 0 1 0 0 0 0 0 
1 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 
No. 9
0 0 0 0 1 0 0 0 
1 0 0 0 0 0 0 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 0 0 1 0 
0 0 1 0 0 0 0 0 
...以下省略

提示

此题可使用函数递归调用的方法求解。

来源

计算概论05

参考代码:

#include<bits/stdc++.h>
using namespace std;
int t,a[10],b[10],c[20],d[20];
void print()
{int i,j;t++;cout<<"No. "<<t<<endl;//输出框架for(i=1;i<=8;i++){for(j=1;j<=8;j++){if(a[j]==i)//如果要输出皇后cout<<"1 ";elsecout<<"0 ";}cout<<endl;}
} 
void dfs(int i)
{int j;if(i>8)//如果所有皇后都已放置,则输出 print();elsefor(j=1;j<=8;j++)if(b[j]==0&&c[i+j]==0&&d[i-j+7]==0){a[i]=j;//计算占领位置b[j]=1,c[i+j]=1,d[i-j+7]=1;dfs(i+1);b[j]=0,c[i+j]=0,d[i-j+7]=0;}
}
int main()
{dfs(1);
}


http://www.ppmy.cn/news/628807.html

相关文章

uva705 - Slash Maze 【转化+dfs】

题目&#xff1a;uva705 - Slash Maze 题意&#xff1a;给出一个迷宫&#xff0c;看题目给出的图就知道&#xff0c;由 \ 和 / 组成&#xff0c;让你求有几个环&#xff0c;然后最大的环由几个矩形组成。 分析&#xff1a;这是一道很灵活的题目&#xff0c;关键在于对题目给出…

洛谷 P2895 [USACO08FEB]Meteor Shower S(BFS与时间)

题目 https://www.luogu.com.cn/problem/P2895#submit 思路 有一些问题与时间有关&#xff0c;往往题目描述是&#xff1a;每隔一段时间&#xff0c;一些点就被摧毁而不能走了&#xff0c;问能够到达指定点或者到达指定点的时间&#xff1f; 这类问题可以使用BFS求解&#xf…

洛谷CF1551B

#include<stdlib.h> #include<stdio.h> using namespace std; int t; char data[55]; int flag[26];//标记所有字母是否出现过 int num1; int num2; int num; int main() { scanf("%d",&t); char temp; scanf("\n"); for(…

洛谷P2888 [USACO07NOV]Cow Hurdles S 题解

洛谷P2888 [USACO07NOV]Cow Hurdles S 题解 题目链接&#xff1a;P2888 [USACO07NOV]Cow Hurdles S 题意&#xff1a;Farmer John 想让她的奶牛准备郡级跳跃比赛&#xff0c;贝茜和她的伙伴们正在练习跨栏。她们很累&#xff0c;所以她们想消耗最少的能量来跨栏。 显然&#x…

洛谷P2768

二分真的好难/(ㄒoㄒ)/~~&#xff01; 首先看题&#xff0c;题目中我们可以知道选手跳跃最短距离的最大值&#xff0c;所以我们可以使用二分。 判断是否需要二分可以看题目中是否有类似求最短距离的最大值或者最大距离的最小值。 那么本题怎么进行二分呢 我们可以以整段距离…

Buffalo框架的使用

【整体介绍&#xff0c;建议先看完下面的内容在回过来看这个介绍】当用户输入账号密码后&#xff0c;点击“提交”按钮&#xff0c;则执行JSh中的getInfo()方法&#xff0c;该方法会调用Buffalo框架中的remoteCall("UserService.getInfo",[username,password],functi…

洛谷 AT_abc178_b [ABC178B] Product Max

洛谷 AT_abc178_b [ABC178B] Product Max 1、题目题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 样例 #3样例输入 #3样例输出 #3 提示制約Sample Explanation 1Sample Explanation 2 2、翻译题面&#xff1a; AC代码&#xff…

洛谷P1077摆花

文章目录 一、题目描述二、思路三、代码 一、题目描述 https://www.luogu.com.cn/problem/P1077 题目描述很容易看懂 二、思路 动态规划题目&#xff0c;首先定义状态 dp[i][j]:摆前i种花&#xff0c;一共摆j盆的方案数。 i&#xff1a;1~n j&#xff1a;1~m 需要注意的时&a…