八皇后问题(初识)
来源:互联网 发布:詹姆斯选秀体测数据 编辑:程序博客网 时间:2024/06/01 14:09
注意:vis数组因为有[cur - i + n]至少要开两倍大
1.什么是八皇后问题?
同一行,同一列,同一对角线只能放一个皇后
2.当n较小为8时可以直接用dfs搜索
不做优化之前
void search(int cur,int v){ if(cur == n) { ans = max(ans,v); return; } for(int i = 0; i < n; i ++) { int ok = 1; C[cur] = i; for(int j = 0; j < cur; j ++)//遍历所有之前的点,判断是否有同列和同对角线的。因为是一行一行遍历的同行是不用考虑的。通对角线考虑两种主对角线和复 //对角线 { if(C[cur] == C[j] || C[cur] + cur == C[j] + j || C[cur] - cur == C[j] -j) { ok = 0; break; } } if(ok) { search(cur + 1,v + a[cur][i]); } }}
当然这样的复杂度是不够用的
利用vis[2][]二维数组,判断之前是否有点在当前的列或对角线上
void search(int cur,int v){ if(cur == n) { ans = max(ans,v); return; } for(int i = 0; i < n; i ++) { if(!vis[0][i] && !vis[1][cur + i] & !vis[2][cur - i + n]) { vis[0][i] = vis[1][cur + i] = vis[2][cur - i + n] = 1; search(cur + 1,v + a[cur][i]); vis[0][i] = vis[1][cur + i] = vis[2][cur - i + n] = 0;//注意一定要改回来 } }}
注意要清空vis
vis数组的第二维要开到n的二倍多
0 0
- 八皇后问题(初识)
- 八皇后问题(N皇后问题)
- 八皇后问题(回溯)
- 八皇后问题(递归)
- 八皇后问题(java)
- 八皇后问题(EightQueens)
- 八皇后问题(回溯)
- 数据结构(八皇后问题)
- 八皇后问题(JAVA)
- 八皇后问题(递归)
- 八皇后问题(一)
- 八皇后问题(二)
- 八皇后问题(三)
- 八皇后问题(递归)
- 八皇后问题(回溯)
- 八皇后问题(递归)
- 八皇后问题(计蒜客)
- 八皇后问题(回溯)
- 最长公共前缀
- hdu 5778 abs【暴力枚举】
- sublime个性化设置
- 多线程编程---同步并发操作
- 软件长寿法则——七点
- 八皇后问题(初识)
- 选择排序之从小到大排序
- Quazip的使用
- ubuntu 上运行 py-faster-rcnn
- ***修改eclipse 代码错误提示级别
- ajax,json,php之间的数据传输
- hdu 1009 FatMouse' Trade
- AngularJS中,如何给动态生成的元素绑定事件
- C#控制台 gettype()与gettypecode()的区别