八皇后問題 (C語言递归實現 回溯法)
来源:互联网 发布:软件自动安装管理器 编辑:程序博客网 时间:2024/05/16 03:17
八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。現在要統計出所有的可行方案的總數,而且輸出每一種方案皇后擺放的坐標;
代碼詳細解析:
#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <cstdlib>#define MAXN 8 //MAXN為最大皇后數,棋盤最大坐標#define RST(N)memset(N, 0, sizeof(N))using namespace std;int queen[MAXN], res = 0; //記錄皇后所在的縱坐標,方案個數void display() //輸出一種可用方案所有皇后的坐標{ for(int i=0; i<MAXN; i++) { printf("(%d, %d)", i, queen[i]); i == MAXN-1 ? printf("\n") : printf(" "); } for(int i=0; i<55; i++) printf("~"); printf("\n"); res++;}bool check(int position) //判斷當前position之前的列是否能夠放置皇后{ for(int i=0; i<position; i++) { //分別判斷當前列以及對角線是否有皇后佔用 if(queen[i] == queen[position] || abs(queen[i]-queen[position]) == (position-i)) return false; } return true;}void put(int position) //回溯,繼續嘗試皇后所在行的位置,position為橫坐標喔{ for(int i=0; i<MAXN; i++) { queen[position] = i; //將皇后擺到當前行的不同列位置 if(check(position)) { if(position == MAXN-1) display(); //全部擺好 else put(position+1); //繼續擺放下一個皇后 } }}int main(){ put(0); //從初始位置進行擺放 printf("%d\n", res); //輸出最後可行的方案總數 return 0;}
0 0
- 八皇后問題 (C語言递归實現 回溯法)
- C语言回溯法递归求解八皇后问题
- 八皇后问题 回溯递归 C语言版
- java回溯法(递归)解八皇后问题
- 回溯法解决八皇后问题(循环/递归)
- 八皇后问题(排列+递归+剪枝=回溯法)
- 八皇后问题(递归+回溯法)
- 八皇后问题(递归+回溯)
- 八皇后问题(递归+回溯)
- 八皇后问题(回溯 递归)
- 八皇后问题(递归,回溯)
- 八皇后问题(递归,回溯)
- 回溯法(八皇后)
- 八皇后问题(递归回溯+迭代回溯)
- 递归回溯--八皇后问题
- 八皇后 回溯递归实现
- 八皇后问题(递归回溯)
- 八皇后问题|递归|回溯
- WordCount详解
- 更新UI注意事项
- ARM推出mbed设备平台及免费操作系统 加速物联网部署
- Android应用源码安卓动画合集大全加站长代码库
- Python数据结构与算法设计(总结篇)
- 八皇后問題 (C語言递归實現 回溯法)
- 无公式无代码白话朴素贝叶斯分类器
- 全排列算法
- .bat 实现延时
- linux 下的粘滞位
- oracle导出数据库方法:运行exp命令导出数据库
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
- onTouchEvent与实现setOnTouchListener
- 堆内存和栈内存的分配