八皇后问题(递归)
来源:互联网 发布:微博用户数据 编辑:程序博客网 时间:2024/06/05 02:15
问题描述
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法.
思路
本题采用回溯递归求解,从第一行开始选择摆放位置,这样就避免了横向冲突,然后每次放置皇后只要检验是否存在纵向冲突或斜向冲突。
code
#include <iostream>using namespace std;const int n = 8;int result[10];int cnt;void slove(int cur){ if(cur == n) { //打印结果 cout << "#" << cnt ++ << ": "; for(int i = 0; i < n; i ++) { cout << "(" << i << ", " << result[i] << ") "; } cout << endl; } else { for(int i = 0; i < n; i ++) { //选择在第cur行第列放置 result[cur] = i; bool ok = true; for(int j = 0; j < cur; j ++) { //检测是否与之前放置的皇后存在斜向或者纵向冲突 if(result[cur]-result[j] == cur-j || result[j]-result[cur] == cur-j || result[cur] == result[j] ) { ok = false; break; } } if(ok) { //没冲突时递归向下一行求解 slove(cur+1); } } }}int main(){ slove(0); return 0;}
0 0
- 八皇后问题(递归)
- 八皇后问题(递归)
- 八皇后问题(递归)
- 八皇后问题(递归)
- 八皇后问题(递归+非递归)
- 递归:: 八皇后问题
- 八皇后问题--递归
- 【递归】八皇后问题
- 八皇后问题(牛人非递归版)
- 八皇后问题(非递归版)
- 八皇后问题(递归版)
- 八皇后问题递归实现(C++)
- 八皇后问题(递归+回溯)
- 八皇后问题(递归+回溯)
- 八皇后问题(回溯 递归)
- 八皇后问题(递归实现)
- 八皇后问题(递归实现)
- 八皇后问题(递归,回溯)
- Java事务(八) - 分布式事务 - spring + JTA + atomikos
- 杭电ACM2001题------java语言
- CSS实现猎豹浏览器首页标签切换效果
- Intel Code Challenge Elimination Round (Div.1 + Div.2, combined)D. Generating Sets(贪心)
- Linux下安装Git
- 八皇后问题(递归)
- C# 创建和写入文件
- Penetration testing checklist based on OWASP Top 10 Mobile
- 链表反转算法
- eclipse查看jar包源代码乱码问题解决
- 大数据系列修炼-Scala课程68
- C++学习笔记--对象创建
- hdu 2098 素数打表
- Android 微信分享与QQ分享功能