求一個有向無換圖中,最長簡單路徑。動態規划問題15-1


package com.li.chapter15.Prictice;

/**
 * 練習題1: 求有向無環圖兩點路徑的最大值。
 *
 * 思路: 給定有向無環圖的矩陣, 從1-n的最長距離,2-n的最長距離...
 *
 * maxLength[i,j]=maxlenth[i,j-1]+length[j]  //length[j]是與終點相連的很多點之一。最大的一個。
 */
public class Question01 {

    public static void main(String[] args){
        int[][] matrix = {{0,2,3},{0,0,2},{0,0,0}};
        maxLength1(matrix);
    }
    /**
     *方法1
     * @param matrix 有向無換圖的矩陣表示
     */
    public static void maxLength1(int[][] matrix) {
        int[][] maxLength=new int[matrix.length][matrix[0].length];  //存儲i到j的最長距離
        for (int i = 0; i < matrix.length; i++) {
            maxLength[i][0] = 0;  //每個節點到初始節點都為0
        }

        for (int i = 1; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                if (i == j) {
                    maxLength[j][i]=0;  //因為無環
                    continue;
                }
                //j到i;
                int length = matrix[i].length;//遍歷,第i個節點相鄰的節點
                maxLength[j][i]=Integer.MIN_VALUE;
                for (int k = 0; k < i; k++) {
                    int value=maxLength[j][k]+matrix[k][i];
                    if (value > maxLength[j][i]) {
                        maxLength[j][i]=value;
                    }
                }
            }

        }
        for (int i = 0; i < maxLength.length; i++) {
            for (int j = 0; j < maxLength[0].length; j++) {
                System.out.print(maxLength[i][j]+"        ");
            }
            System.out.println("");
        }
    }


}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM