1213:八皇后问题

简介: 1213:八皇后问题

1213:八皇后问题

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

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

【输入】

(无)

【输出】

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

【输入样例】

(无)

【输出样例】

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

1. #include<iostream>
2. #include<cstdio>
3. #include<iomanip>
4. using namespace std;
5. int a[9],b[9],c[17],d[17];
6. int sum=0;
7. void print()
8. {
9.  sum++;
10.   cout<<"No. "<<sum<<endl;
11.   for(int i=1;i<=8;i++){
12.     for(int j=1;j<=8;j++) 
13.       if(i==a[j]) cout<<"1 ";
14.       else cout<<"0 ";
15.     cout<<endl; 
16.   }
17. }
18. int dfs(int i)
19. {
20. 
21.   for(int j=1;j<=8;j++){
22.     if((b[j]==0)&&(c[i+j]==0)&&(d[i-j+7]==0)){
23.       a[i]=j;
24.       b[j]=1;
25.       c[i+j]=1;
26.       d[i-j+7]=1;
27.       if(i==8) print();
28.       else dfs(i+1);
29.       b[j]=0;
30.       c[i+j]=0;
31.       d[i-j+7]=0;
32.     } 
33.   } 
34. }
35. int main()
36. {
37.   dfs(1);
38.   return 0;
39.  }

 


相关文章
|
5月前
|
算法
【算法学习】—n皇后问题(回溯法)
【算法学习】—n皇后问题(回溯法)
|
6月前
|
索引
八皇后问题
八皇后问题
139 0
|
7月前
|
存储 算法 搜索推荐
蓝桥杯丨分治算法
蓝桥杯丨分治算法
37 0
|
机器学习/深度学习
递归实现 八皇后问题(*)
递归实现 八皇后问题(*)
105 0
递归实现 八皇后问题(*)
|
算法
【算法】 八皇后问题之回溯法
会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。每次填满第一行第一列,当不满足时候,试下第一行第二列,依次进行,递归的出口为找到第八个点,跳出递归。,在循环里面还要判断是否满足不同行,不同列,不同对角线。使用回溯法来解决该问题,下面的代码是我看到过的最精简的代码,相关的注释都写在代码上了。运行得出结果,总共有92中结果。
209 0
|
机器学习/深度学习 算法
【回溯算法篇】N皇后问题
【回溯算法篇】N皇后问题
【回溯算法篇】N皇后问题
|
机器学习/深度学习 算法
<<算法很美>>——(六)——回溯算法(下)—N皇后问题
<<算法很美>>——(六)——回溯算法(下)—N皇后问题
<<算法很美>>——(六)——回溯算法(下)—N皇后问题
|
算法 Java
【递归与回溯算法】汉诺塔与八皇后问题详解
文章目录 1 汉诺塔问题 1.1 汉诺塔问题概述 1.2 思路分析 1.3 代码实现(Java) 1.4 结果验证 2 八皇后问题 2.1 八皇后问题概述 2.2 思路分析 2.2.1 问题划分与分析 2.2.2 涉及到的数据结构分析 2.2.3 上下对角线与行列的关系 2.3 代码实现(Java) 2.4 结果验证
【递归与回溯算法】汉诺塔与八皇后问题详解