您的位置:首页 > 产品设计 > UI/UE

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的数量即可。

/*
* 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: