day35

上色问题


    /**
     * *******************************
     * Unit test for depthFirstTraversal.
     * *******************************
     */
    public static void depthFirstTraversalTest() {
        //Test an undirected graph.
        int[][] tempMatrix = {{0, 1, 1, 0}, {1, 0, 0, 1}, {1, 0, 0, 0}, {0, 1, 0, 0}};
        Graph tempGraph = new Graph(tempMatrix);
        System.out.println(tempGraph);

        String tempSequence = "";
        try {
            tempSequence = tempGraph.depthFirstTraversal(0);
        } catch (Exception ee) {
            System.out.println(ee);
        }//Of try

        System.out.println("The depth first order of visit: " + tempSequence);
    }//Of depthFirstTraversalTest

    /**
     * *******************************
     * Coloring. Output all possible schemes.
     *
     * @param paraNumColors The number of colors.
     *                      *******************************
     */
    public void coloring(int paraNumColors) {
        //Step 1.Initialized.
        int tempNumNodes = connectivityMatrix.getRows();
        int[] tempColorScheme = new int[tempNumNodes];
        Arrays.fill(tempColorScheme, -1);

        coloring(paraNumColors, 0, tempColorScheme);
    }//Of coloring

    /**
     * *******************************
     * Coloring. Output all possible approaches.
     *
     * @param paraNumColors The number of colors.
     * @return The sequence of the visit.
     * *******************************
     */
    public void coloring(int paraNumColors, int paraCurrentNumNodes, int[] paraCurrentColoring) {
        //Step 1. Initialize.
        int tempNumNodes = connectivityMatrix.getRows();

        System.out.println("coloring paraNumColors = " + paraNumColors +
                ", paraCurrentNumNodes = " + paraCurrentNumNodes + ", paraCurrentColoring " + Arrays.toString(paraCurrentColoring));
        //A complete scheme.
        if (paraCurrentNumNodes >= tempNumNodes) {
            System.out.println("Find one: " + Arrays.toString(paraCurrentColoring));
            return;
        }//Of if

        //Try all possible colors.
        for (int i = 0; i < paraNumColors; i++) {
            paraCurrentColoring[paraCurrentNumNodes] = i;
            if (!colorConflict(paraCurrentNumNodes + 1, paraCurrentColoring)) {
                coloring(paraNumColors, paraCurrentNumNodes + 1, paraCurrentColoring);
            }//Of if
        }//Of for i
    }//Of coloring

    /**
     * *******************************
     * Coloring conflict or not. Only compare the current last node with previous
     * ones.
     *
     * @param paraCurrentNumNodes The current number of nodes.
     * @param paraColoring        The current coloring scheme
     * @return Conflict or not.
     * *******************************
     */
    public boolean colorConflict(int paraCurrentNumNodes, int[] paraColoring) {
        for (int i = 0; i < paraCurrentNumNodes - 1; i++) {
            //No direct connection
            if (connectivityMatrix.getValue(paraCurrentNumNodes - 1, i) == 0) {
                continue;
            }//Of if

            if (paraColoring[paraCurrentNumNodes - 1] == paraColoring[i]) {
                return true;
            }//Of if
        }//Of for i
        return false;
    }//Of colorConflict

    /**
     * *******************************
     * Coloring test.
     * *******************************
     */
    public static void coloringTest() {
        int[][] tempMatrix = {{0, 1, 1, 0}, {1, 0, 0, 1}, {1, 0, 0, 0}, {0, 1, 0, 0}};
        Graph tempGraph = new Graph(tempMatrix);
        tempGraph.coloring(3);
    }//Of coloringTest

    /**
     * *******************************
     * The entrance of the program.
     *
     * @param args Not used now.
     *             *******************************
     */
    public static void main(String[] args) {
        Graph tempGraph = new Graph(3);
        System.out.println(tempGraph);

        //Unit test.
        getConnectivityTest();

        breadthFirstTraversalTest();

        depthFirstTraversalTest();

        coloringTest();
    }//Of main

问题:

为什么有的地方需要多次new?如27行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值