private AdjacencyMatrixNode <T>[,] ExtenedShortestPath( AdjacencyMatrixNode <T>[,] matrix, AdjacencyMatrixNode <T>[,] matrixB) { var length = matrix.GetLength(0); var result = new AdjacencyMatrixNode <T> [length, length]; for (int i = 0; i < length; i++) { for (int j = 0; j < length; j++) { result[i, j] = new AdjacencyMatrixNode <T>(); result[i, j].PathWeight = int.MaxValue; for (int k = 0; k < length; k++) { var newPathWeight = Add(matrix[i, k].PathWeight, matrixB[k, j].PathWeight); result[i, j].Predecessor = i; if (newPathWeight < result[i, j].PathWeight) { result[i, j].Predecessor = k; } result[i, j].PathWeight = Math.Min( result[i, j].PathWeight, newPathWeight); } } } return(result); }
public void PrintMartrix(AdjacencyMatrixNode <T>[,] martrix) { //多维数组的遍历 Console.WriteLine(); var length = martrix.GetLength(0); for (int i = 0; i < length; i++) { Console.WriteLine(); for (int j = 0; j < length; j++) { var s = martrix[i, j].PathWeight == int.MaxValue ? "oo" : martrix[i, j].PathWeight.ToString(); var p = martrix[i, j].Predecessor == int.MaxValue ? "oo" : martrix[i, j].Predecessor.ToString(); //不支持表达式 Console.Write($"{s}, {p} \t"); } } }
public AdjacencyMatrixGraph(AdjacencyMatrixNode <T>[,] matrix) { _matrix = matrix; }