八皇后问题
2017-11-15 20:21
232 查看
package javatask; public class EightQueenO { private int[][]map; private int len; private int[]C; private int tol; public static void main(String[] args) { new EightQueenO().run(); } public EightQueenO() { len = 8; C = new int[len];//记录当前行可放置的列 tol = 0; } public void run() { search(0); System.out.println("total = " + tol); } public boolean isOk(int row, int col) { for(int j = 0; j < row; j++ ) { if(C[j] == col || C[j]+ j == col+row || C[j]-j == col-row) {//只需要判断当前行以前的对角线和列即可 return false; } } return true; } public void search(int cur) { if(cur == len) { tol++; //只有到达 这里时候 才是完成了 八皇后 for(int i = 0; i < len; i++ ) { for(int j = 0; j < len; j++ ) { if(C[i] == j) System.out.print(1+" "); else System.out.print(0 +" "); } System.out.println(); } System.out.println("***************"); } else { for(int i = 0; i < len; i++ ) { C[cur] = i;//这里保证了 最终的值一定是构成8皇后时候的值(因为其值不断被修改直到完成所有行) if(isOk(cur, i)) { // map[cur][i] = 1;//有的不能构成八皇后但是仍然 在末尾之前的位置满足 也被记录了 search(cur+1); //所以用map记录是错误的 } } } // for(int i = 0; i < len; i++ ) { // int ok = 1; // C[cur] = i; // for(int j = 0; j < cur; j++ ) { // if(C[j] == C[cur]|| C[j]+ j == C[cur]+cur || C[j]-j == C[cur]-cur) { // ok = 0; break; // } // } // if(ok == 1) search(cur+1); // } } }
中间的dfs部分可以换成
for(int i = 0; i < len; i++ ) { if(isOk(cur, i)) { vis[cur] = i; search(cur+1); vis[cur] = 0;//保证 只有成功的时候才会被记录 然后 输出后 立刻 清零 } }
相关文章推荐
- 递归解决八皇后问题
- 八皇后(N皇后)问题算法程序(回溯法)
- 八皇后问题
- 用回溯法求解八皇后问题
- 八皇后问题
- 八皇后问题
- python基础教程总结8——特殊方法,属性,迭代器,生成器,八皇后问题
- 八皇后问题(递归版)(回溯算法的典型案列)
- 回溯算法之八皇后问题深度解析
- 八皇后问题 EightQueen
- 回溯法解决八皇后问题--精简版
- 回溯算法思想与八皇后问题解的个数
- 八皇后问题解析.关键问题提示
- 第十九章 ALDS1_13_A:8 Queens Problem 八皇后问题
- Java与算法之(6) - 八皇后问题
- 八皇后问题
- 八皇后问题
- 回溯法,八皇后问题
- 深度优先搜索——八皇后问题
- 【Acm】八皇后问题