Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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");
                }
            }
        }
Exemplo n.º 3
0
 public AdjacencyMatrixGraph(AdjacencyMatrixNode <T>[,] matrix)
 {
     _matrix = matrix;
 }