首页 > 代码库 > 回溯算法之八皇后问题
回溯算法之八皇后问题
1 package 回溯; 2 3 public class 八皇后递归回溯 { 4 5 private int length; //皇后数量 6 private int sum; //总方案数 7 private int num[]; //存放皇后的一维数组 8 9 public 八皇后递归回溯() {10 length = 8;11 sum=0;12 num = new int[length + 1];13 }14 15 public boolean check(int x) {16 for (int i = 1; i < x; ++i) { //在一列,或对角线17 if (num[x] == num[i]|| Math.abs(x - i) == Math.abs(num[x] - num[i]))18 return false;19 }20 return true;21 }22 23 public void reback(int x) {24 if (x > length) {25 for (int i = 1; i <= length; ++i) {26 System.out.print(num[i] + " ");27 }28 System.out.println();29 sum++;30 } else {31 for (int i = 1; i <= length; ++i) {32 num[x] = i;33 if (check(x)) reback(x + 1); //第x个皇后找到位置,则继续第x+1个,i=1的方案完毕后继续i=2的方案34 }35 }36 }37 38 public static void main(String[] args) {39 八皇后递归回溯 test=new 八皇后递归回溯();40 test.reback(1);41 System.out.println("共"+test.sum+"种方案");42 }43 }
回溯算法的原则:不进则退。讲搜索空间看成树,可采用深度优先、广度优先等策略进行搜索,上述所示八皇后采用深度优先策略
回溯算法之八皇后问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。