159.N-Queens II
2016-08-26 10:33
190 查看
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
分析:与上一道题目一样,只不过这个题只需要返回solution的数量即可。
Now, instead outputting board configurations, return the total number of distinct solutions.
分析:与上一道题目一样,只不过这个题只需要返回solution的数量即可。
/* * Step1:定义一个数组nodes,nodes[i]表示第i行的皇后存放的列下标; * Step2:定义一个函数来整理所有的结点都存放到矩阵之后的结果; * Step3:定义一个函数来判断(row,j)是否可以存放的目前的结果中; * Step4:定义一个函数来为row行的皇后找地方,如果找到了则继续为row+1找位置,如果没有找到则退回到row-1,尝试为 * row-1找其当前位置之后的位置。 */ /*准备要返回的结果*/ int count = 0; int[] nodes;//nodes[i]的value值表示标号为i行存储的位置 int num; public int totalNQueens(int n) { /*Step1:初始化每行的那个结点即将要尝试的坐标*/ nodes = new int ; num = n; /*Step2:开始尝试*/ addNode(0); /*Step3:返回最后的结果*/ return count; } /*往结果集中添加结点,row表示本次准备放的行号*/ private void addNode(int row){ /*如果所有的结点都已经放到均镇中,则整理结果*/ if(row == num){ ++count; }else{ for(int i=0; i<num; i++){/*如果找到了则继续为row+1找位置,如果没有找到则退回到row-1,尝试为row-1找其当前位置之后的位置。*/ nodes[row] = i; if(CanAddNode(row , nodes[row])){ addNode(row+1); } } } } /*判断(row,j)能否加入到当前的结果中*/ private boolean CanAddNode(int row,int j){ for(int k =0;k<row;k++){ if( nodes[k] == j || Math.abs(nodes[k] - j)== row - k){//说明列有重复或者在同一对角线上,要返回false return false; } } return true; }
相关文章推荐
- LeetCode : N-Queens II
- N-Queens II
- N-Queens II
- LeetCode | N-Queens II
- N-Queens II
- [LeetCode] N-Queens II
- LeetCode OJ算法题(五十一):N Queens II
- N-Queens II
- leetcode N-Queens II
- N-Queens II
- leetcode 52. N-Queens II
- Java for LeetCode 052 N-Queens II
- [Leetcode 52, Hard] N Queens II
- N-Queens II——Leetcode
- 【Leetcode】N-Queens II
- leetcode52 N-Queens II
- N-Queens II
- LeetCode 52 N-Queens II (DFS)
- Leetcode52: N-Queens II
- 52. N-Queens II