• 回溯法---n皇后问题(4)


    回溯法---n皇后问题(4)
    以八皇后问题为例:

    如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处

    于同一条横行、纵行或斜线上。

    在前面所说的算法框架上解八皇后问题:

    import java. util.Vector ;

    public class Queen extends CombineProblem {

             int start;

             public Queen( int n, int start) {

                     this.flag = false ;

                     this.x = new Integer[n ];

                     this.start = start;

                     this.n = n;

             }

            @Override
             public Vector<Comparable> makeIterm (int k) {
                    Vector vec = new Vector();
                     for ( int i = 0 ; i < n; i++) {
                            vec .add( i);
                     }
                     return vec;
             }

            @Override
             public boolean complete(int k) {
                     if ( k >= n) {
                            flag = true ;
                             return true ;
                     }
                     return false ;
             }

            @Override
             public void printsolution(int k) {
                     for ( int i = 0 ; i < n; i++) {
                            System .out. print((Integer )x[ i]+1 + " " );
                     }
                    System .out. println();
             }

            @Override
             public boolean isPartial(int k) {
                     for ( int i = 0 ; i < k ; i ++) {
                             if ( x[i] == x[ k]
                                             || Math. abs(i - k) == Math
                                                             .abs((( Integer) x[i] - (Integer ) x[ k]))) {
                                     return false ;
                             }
                            
                     }
                     return true ;
             }
    }

    运行结果:

    1 5 8 6 3 7 2 4
    1 6 8 3 7 4 2 5
    1 7 4 6 8 2 5 3
    1 7 5 8 2 4 6 3
    2 4 6 8 3 1 7 5
    2 5 7 1 3 8 6 4
    2 5 7 4 1 8 6 3
    2 6 1 7 4 8 3 5
    2 6 8 3 1 4 7 5
    2 7 3 6 8 5 1 4
    2 7 5 8 1 4 6 3
    2 8 6 1 3 5 7 4
    3 1 7 5 8 2 4 6
    3 5 2 8 1 7 4 6
    3 5 2 8 6 4 7 1
    3 5 7 1 4 2 8 6
    3 5 8 4 1 7 2 6
    3 6 2 5 8 1 7 4
    3 6 2 7 1 4 8 5
    3 6 2 7 5 1 8 4
    3 6 4 1 8 5 7 2
    3 6 4 2 8 5 7 1
    3 6 8 1 4 7 5 2
    3 6 8 1 5 7 2 4
    3 6 8 2 4 1 7 5
    3 7 2 8 5 1 4 6
    3 7 2 8 6 4 1 5
    3 8 4 7 1 6 2 5
    4 1 5 8 2 7 3 6
    4 1 5 8 6 3 7 2
    4 2 5 8 6 1 3 7
    4 2 7 3 6 8 1 5
    4 2 7 3 6 8 5 1
    4 2 7 5 1 8 6 3
    4 2 8 5 7 1 3 6
    4 2 8 6 1 3 5 7
    4 6 1 5 2 8 3 7
    4 6 8 2 7 1 3 5
    4 6 8 3 1 7 5 2
    4 7 1 8 5 2 6 3
    4 7 3 8 2 5 1 6
    4 7 5 2 6 1 3 8
    4 7 5 3 1 6 8 2
    4 8 1 3 6 2 7 5
    4 8 1 5 7 2 6 3
    4 8 5 3 1 7 2 6
    5 1 4 6 8 2 7 3
    5 1 8 4 2 7 3 6
    5 1 8 6 3 7 2 4
    5 2 4 6 8 3 1 7
    5 2 4 7 3 8 6 1
    5 2 6 1 7 4 8 3
    5 2 8 1 4 7 3 6
    5 3 1 6 8 2 4 7
    5 3 1 7 2 8 6 4
    5 3 8 4 7 1 6 2
    5 7 1 3 8 6 4 2
    5 7 1 4 2 8 6 3
    5 7 2 4 8 1 3 6
    5 7 2 6 3 1 4 8
    5 7 2 6 3 1 8 4
    5 7 4 1 3 8 6 2
    5 8 4 1 3 6 2 7
    5 8 4 1 7 2 6 3
    6 1 5 2 8 3 7 4
    6 2 7 1 3 5 8 4
    6 2 7 1 4 8 5 3
    6 3 1 7 5 8 2 4
    6 3 1 8 4 2 7 5
    6 3 1 8 5 2 4 7
    6 3 5 7 1 4 2 8
    6 3 5 8 1 4 2 7
    6 3 7 2 4 8 1 5
    6 3 7 2 8 5 1 4
    6 3 7 4 1 8 2 5
    6 4 1 5 8 2 7 3
    6 4 2 8 5 7 1 3
    6 4 7 1 3 5 2 8
    6 4 7 1 8 2 5 3
    6 8 2 4 1 7 5 3
    7 1 3 8 6 4 2 5
    7 2 4 1 8 5 3 6
    7 2 6 3 1 4 8 5
    7 3 1 6 8 5 2 4
    7 3 8 2 5 1 6 4
    7 4 2 5 8 1 3 6
    7 4 2 8 6 1 3 5
    7 5 3 1 6 8 2 4
    8 2 4 1 7 5 3 6
    8 2 5 3 1 7 4 6
    8 3 1 6 2 5 7 4
    8 4 1 3 6 2 7 5 




  • 相关阅读:
    leetcode刷题笔记四十四 通配符匹配
    leetcode刷题笔记四十三 字符串相乘
    leetcode刷题笔记四十二 接雨水
    Scala 学习 -- 其他集合类学习
    Scala 学习 -- 列表
    leetcode刷题笔记四十一 缺失的第一个正数
    HTML5每日一练之OL列表的改良
    HTML5边玩边学(1)画布实现方法
    html5 +css3 第一章学习和笔记
    HTML5每日一练之figure新标签的应用
  • 原文地址:https://www.cnblogs.com/ZhangJinkun/p/4531360.html
Copyright © 2020-2023  润新知