zoukankan      html  css  js  c++  java
  • 回溯法---n-着色问题(3)

    回溯法---n-着色问题(3)
    以三色问题为例:

    对给定无向图着色,相邻点颜色不能相同,限用3种颜色

    在框架基础上的实现:

    import java. util.Vector ;

    public class ThreeColor extends CombineProblem {
        int[][] graph;
        int start ;

        public ThreeColor (int[][] graph, int start) {
             super();
             this.graph = graph;
             this.start = start;
             this.flag = false ;
             this.n = graph. length;
             this.x = new Integer[n];
        }

        @Override
        public Vector <Comparable> makeItem(int k) {
            Vector <Comparable> vec = new Vector<Comparable>();
             for ( int i = 1 ; i <= 3 ; i++) {
                vec .add( i);
             }
             return vec;
        }

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

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

        @Override
        public boolean isPartial (int k) {
             for ( int i = 0 ; i < k; i++) {
                 if ( graph[k ][i] == 1 && x [k] == x[i ]) {
                     return false ;
                 }
             }
             return true ;
        }

    }

    主函数:

    public class Main {

        public static void main (String[] args) {

             int[][] graph = { { 0, 1 , 1 , 0 }, { 1, 0, 0, 1 }, { 1 , 0 , 0 , 1 },
                     { 0 , 1 , 1 , 0 } };

             Problem p = new ThreeColor(graph , 0 );
            
             p .explore(0);

             if (! p.flag) {
                System .out. println("no solution!" );
             }

        }

    }

    运行结果:

    1 2 2 1
    1 2 2 3
    1 2 3 1
    1 3 2 1
    1 3 3 1
    1 3 3 2
    2 1 1 2
    2 1 1 3
    2 1 3 2
    2 3 1 2
    2 3 3 1
    2 3 3 2
    3 1 1 2
    3 1 1 3
    3 1 2 3
    3 2 1 3
    3 2 2 1
    3 2 2 3 





  • 相关阅读:
    配置Log4j(非常具体)
    RapeLay(电车之狼R)的结局介绍 (隐藏结局攻略)
    普林斯顿公开课 算法1-11:并查集的应用
    检查Oracle 中死事务的语句
    app被Rejected 的各种原因翻译
    经典语录和思考总结
    Java实现夺冠概率模拟
    Java实现夺冠概率模拟
    Java实现打印回型嵌套
    Java实现打印回型嵌套
  • 原文地址:https://www.cnblogs.com/ZhangJinkun/p/4531361.html
Copyright © 2011-2022 走看看