【N皇后&DFS】N-Queens II
2014-04-19 13:34
537 查看
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
求解法种数,使用DFS求排列和上一题的差不多
解法二:在进行DFS前进行判断是否前面的摆放已经符合要求
public class Solution {
public int n=0, count=0;
public int []col;
public boolean check(int k){
for(int i=0; i<k; i++){//判断第k个节点前的皇后摆放是否正确
if(col[i] == col[k] || Math.abs(col[i]-col[k])==Math.abs(k-i)) return false;
}
return true;
}
public void dfs(int pos){
if(pos == n){
count++;
return ;
}
for(int i=0; i<n; i++){//可以摆放n个位置
col[pos] = i;
if(check(pos)){
dfs(pos+1);
}
}
}
public int totalNQueens(int n) {
this.n = n;
col = new int
;
for(int i=0; i<n; i++) col[i] = 0;
dfs(0);
return count;
}
}
Now, instead outputting board configurations, return the total number of distinct solutions.
求解法种数,使用DFS求排列和上一题的差不多
public class Solution { public int n=0, count=0; public int []col; public void swap(int num[], int i, int j){ int t = num[i]; num[i] = num[j]; num[j] = t; } public boolean check(){ for(int i=0; i<n; i++){ for(int j=i+1; j<n; j++){ if(col[i] == col[j] || Math.abs(col[i]-col[j])==j-i) return false; } } return true; } public void dfs(int pos){ if(pos == n){ if(check()){ count++; } return ; } for(int i=pos; i<n; i++){ swap(col, pos, i); dfs(pos+1); swap(col, pos, i); } } public int totalNQueens(int n) { this.n = n; col = new int ; for(int i=0; i<n; i++) col[i] = i; dfs(0); return count; } }
解法二:在进行DFS前进行判断是否前面的摆放已经符合要求
public class Solution {
public int n=0, count=0;
public int []col;
public boolean check(int k){
for(int i=0; i<k; i++){//判断第k个节点前的皇后摆放是否正确
if(col[i] == col[k] || Math.abs(col[i]-col[k])==Math.abs(k-i)) return false;
}
return true;
}
public void dfs(int pos){
if(pos == n){
count++;
return ;
}
for(int i=0; i<n; i++){//可以摆放n个位置
col[pos] = i;
if(check(pos)){
dfs(pos+1);
}
}
}
public int totalNQueens(int n) {
this.n = n;
col = new int
;
for(int i=0; i<n; i++) col[i] = 0;
dfs(0);
return count;
}
}
相关文章推荐
- UIScrollView 和 UIPageControl实现页面循环播放
- IOS 警告框 (UIAlertView)的使用方法
- [💯原]IOS动画中的枚举UIViewAnimationOptions
- UITextField相关
- value的类型判断然后调用Date
- A Quick Look At Programming Language
- sendKeys(CharSequence[])
- FruitAttack(水果消消看)源代码下载
- “Gender”有一个无效 SelectedValue,因为它不在项目列表中。参数名: value
- Android UI设计技巧
- 优先队列---priority_queue
- 使用.a库时,报错missing required architecture i386, 使用lipo的方法可完美解决
- 【N皇后&DFS】N-Queens
- uiautomator测试中scrollForward方法使用失灵
- UIView-draggable 可拖拽的UIView
- DTrace User Guide
- 把UE、notepad++等添加到右键菜单
- A sigular value decomposition(奇异值分解)
- 南阳 686 An Interesting Sequence
- 新浪开发平台应用storage和ueditor