N-Queens II
来源:互联网 发布:java变量命名规则$ 编辑:程序博客网 时间:2024/06/03 22:53
原题:
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
即n皇后问题不用返回解集,返回解集数量就可以。
思考过程&解题思路:
和N-QueensI思路一样,只不过省略处理结果集一步,直接计数就可以了。详情见代码注释。
结果代码:
int ret = 0; public int totalNQueens(int n) { int[] subRet = new int[n]; backTrackingForTotal(subRet,0,1,n); return ret; } public void backTrackingForTotal(int[] subRet,int row,int column,int n){ if (column == n + 1)//column越界的情况 if (subRet[row] == 0) return;//说明这一行没有皇后,这个解集是失败的,不再用。return else if (row == n - 1){//解集已经补全了 ret++; return; } else { row++;column = 1;//以上情况都不属于,那么变到下一行。 } int[] newSubRet = new int[n]; newSubRet = Arrays.copyOf(subRet,n);//复制一个解集,用于在当前位置放'Q' if (canPutQ(newSubRet,row,column))//判断是否可以放'Q' backTrackingForTotal(newSubRet,row,n + 1,n);//如果能,调到下一行 backTrackingForTotal(subRet,row,column + 1,n);//不能放的情况,向后走 }public boolean canPutQ(int[] subRet,int row,int column){//判断此处是否可以放'Q' if (subRet[row] != 0) return false;//这行有'Q',返回false for (int i = 0;i < row;i++) if (subRet[i] == column || Math.abs(subRet[i] - column) == Math.abs(i - row)) return false;//这一列或者斜线上是否有Q subRet[row] = column; return true; }
阅读全文
0 0
- N-Queens && N-Queens II
- LeetCode: N-Queens II
- LeetCode : N-Queens II
- [Leetcode] N-Queens II
- N-Queens II
- 【leetcode】N-Queens II
- LeetCode: N Queens II
- [LeetCode]N-Queens II
- N-Queens II
- N-Queens II
- LeetCode - N-Queens II
- LeetCode:N-Queens II
- N-Queens II
- N-Queens II
- 【leetcode】N-Queens II
- LeetCode:N-Queens II
- Leetcode: N-Queens II
- leetcode N-Queens II
- Android输入事件从读取到分发二:谁在循环监听事件的到来
- logstash将采取kafka的数据到elasticSearch配置
- faster-rcnn 之 RPN网络的结构解析
- echarts模拟从数据库异步加载数据
- 第八周项目二(3) 顺序串算法测试-串内元素的删除
- N-Queens II
- bzoj1005 小明的烦恼
- oracle创建存储过程并调用
- Android零基础入门第79节:Intent 属性详解(上)
- IDEA中 @override报错的解决方法
- document.layers 与 document.all 的区别
- 用什么方法可以在业务批量操作的时候保持原子性?例如删除多条文章,但是在中 间有一条被删除了,假设出现了错误,如何让整个操作回滚,并定位错误信息?
- display:none 和 visilibity:hidden的区别
- Android输入事件从读取到分发三:InputDispatcherThread线程分发事件的过程