多端图的描述其实就是有向图。对应的算法书这块,大家可以在学习算法时就会接触到关于最短路径的求解。
例图:
就是在这样的图去寻找V1到V5的最短路径。
那么思路是什么?
明确目标:
- V1到V5
- 并且是一个可通图
- 路径长度最短
这样一来思路就很清晰。设立数组value[]来表示对应到12个端点的最值。value[i]表示由0-i 的最短路径。
对应的代码:
public static int []value;
public static int fun(int[][] arr, int a) {
value = new int[arr.length];
Arrays.fill(value, Integer.MAX_VALUE);
int[] parent = new int[arr.length];
Arrays.fill(parent, -1);
value[0]=0;
parent[0]=-1;
for (int j = 1; j < arr.length; j++) {
for (int i = j - 1; i >= 0; i--) {
if (arr[i][j] != a) {
int d = value[i] + arr[i][j];
if (d < value[j]) {
value[j] = d;
parent[j] = i;
}
}
}
}
return value[arr.length - 1];
}
用例:
public static void main(String[] args) {
int a = Integer.MAX_VALUE;
int[][] arr = new int[][] { { a, 2, 3, 1, a }, { a, a, a, a, 5 }, { a, a, a, a, 3 }, { a, a, a, a, 7 },
{ a, a, a, a, a } };
System.out.println(fun(arr, a));
for(int i=0;i<value.length;i++) {
System.out.print(value[i]+" ");
}
}
用例图解: