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(""); } } }