回溯(su)算法之N皇后问题

这里回溯算法还要好好研究一下

试探一个位置是否有效,如果有效,试探下一个位置(DFS),如果无效则回退

1.定义一个解空间,存放一个解的空间

2.DFS(暂且认为是DFS)

这里N皇后用的是递归+回溯实现的

 1 package com.gxf.backtracking;
 2 
 3 /**
 4  * n皇后问题
 5  * @author Administrator
 6  *
 7  */
 8 public class Queen {
 9     int num_queen;                                    //皇后个数
10     int solution[];                                    //solution[i] = k表示第i行皇后在第k列    ,solution为解空间
11     int sum = 0;
12     
13     public Queen(int num){
14         num_queen = num;
15         solution = new int[num_queen + 1];
16     }
17     
18     /**
19      * 第k个皇后的位置是否有效
20      * 第k个皇后的列保存在solution[k]中,与前面k-1个皇后比较
21      * @param k
22      * @return
23      */
24     boolean isValid(int k){
25         for(int i = 1; i < k; i++){
26             if(solution[i] == solution[k] || Math.abs(k - i) == Math.abs(solution[k] - solution[i]))
27                 return false;            
28         }
29         return true;
30     }
31     
32     /**
33      * 开始放第n个皇后
34      * @param queen
35      */
36     public void placeQueen(int n){
37         if(n > num_queen)
38         {
39             showSolution();
40             System.out.println();
41             sum++;
42         }
43         else
44             for(int i = 1; i <= num_queen; i++){
45                 solution[n] = i;                        //n个皇后放到i列 
46                 if(isValid(n))
47                     placeQueen(n + 1);
48             }
49     }
50     
51     /**
52      * 将结果打印出来
53      */
54     public void showSolution(){
55         for(int i = 1; i <= num_queen; i++){
56             for(int j = 1; j <= num_queen; j++){
57                 if(j == solution[i])
58                     System.out.print('Q' + " ");
59                 System.out.print(0 + " ");
60             }
61             System.out.println();
62         }
63     }
64     
65     public static void main(String[] args) {
66         Queen queen = new Queen(4);
67         
68         queen.placeQueen(1);
69         System.out.println("sum = " + queen.sum);
70     }
71 
72 }

posted on 2014-11-24 20:56  luckygxf  阅读(264)  评论(0编辑  收藏  举报

导航