八皇后问题 回溯
2016-03-15 08:08
253 查看
作为回溯法的典型,水一下。
逐行放置,对列和对角线进行检查,使用vis数组保存状态。回溯注意在各个出口都要将条件“恢复原状”。
题意:
棋盘上放置8个皇后,每个皇后的攻击范围为同行同列和同对角线。要求找出所有解,使得她们互不攻击。分析:
回溯法。逐行放置,对列和对角线进行检查,使用vis数组保存状态。回溯注意在各个出口都要将条件“恢复原状”。
代码:
#include<iostream> using namespace std; const int maxn = 25; int cnt = 0, m , n; int vis[3][maxn], ans[maxn]; void dfs(int row) { if(row == n){ cnt++; return; } for(int i = 0; i < m; i++){ if(!vis[0][i]&&!vis[1][i- row + n] && !vis[2][i + row]){ vis[0][i] = vis[1][i - row + n] = vis[2][i + row] = 1; ans[row] = i;//打印解 dfs(row + 1); vis[0][i] = vis[1][i - row + n] = vis[2][i + row] = 0; } } } int main (void) { m = n = 8; dfs(0); cout<<cnt<<endl; }
相关文章推荐
- POJ 2676 Sudoku (DFS回溯剪枝)
- hdu2089 不要62 数位DP
- 在Image切换时利用CrossFadeImage来产生动画特效
- 报错:The resource name must start with a letter
- 软工大作业·源物语(三)
- Python设计模式(8)-抽象工厂
- zhiliti
- 【bzoj4071】[Apio2015]巴邻旁之桥 三分套三分
- 软工大作业·源物语(三)
- Taming the asynchronous beast with ES7
- 数据库出现的问题
- elasticsearch2.2
- 入门git
- javascript模板插件amaze.js
- Arcgis for js,Openlayers中加载GeoJSON
- Arcgis for js,Openlayers中加载GeoJSON
- jQuery tab plugin
- hw14+16
- 计算两坐标的长度
- Android 内存优化大全(中)