public static (double[, ], string[, ]) FindShortestPathMatrix(AdjacencyList list) { _list = list; D = _list.GetAdjacencyMatrix(); F = new string[_list.Length, _list.Length]; for (int i = 0; i < _list.Length; i++) { for (int j = 0; j < _list.Length; j++) { F[i, j] = _list[j]; } } for (int k = 0; k < _list.Length; ++k) { for (int i = 0; i < _list.Length; ++i) { for (int j = 0; j < _list.Length; ++j) { if (D[i, k] + D[k, j] < D[i, j]) { D[i, j] = D[i, k] + D[k, j]; F[i, j] = F[i, k] + "-> " + F[k, j]; } } } } return(D, F); }
public static AdjacencyList CreateAdjacencyList(string path) { string[] allStrings = File.ReadAllLines(path); AdjacencyList adjacencyList = new AdjacencyList(); for (int i = 0; i < allStrings.Length; i++) { string from = allStrings[i].Substring(0, allStrings[i].IndexOf(' ')); allStrings[i] = allStrings[i].Substring(allStrings[i].IndexOf(' ') + 1); string to = allStrings[i].Substring(0, allStrings[i].IndexOf(' ')); allStrings[i] = allStrings[i].Substring(allStrings[i].IndexOf(' ') + 1); int capacity = int.Parse(allStrings[i]); adjacencyList.Insert(from, to, new DataEdge() { Capacity = capacity, Flow = 0 }); } return(adjacencyList); }
public static AdjacencyList CreateAdjacencyList(string path) { string[] allStrings = File.ReadAllLines(path); AdjacencyList adjacencyList = new AdjacencyList(); for (int i = 0; i < allStrings.Length; i++) { string fromCity = allStrings[i].Substring(0, allStrings[i].IndexOf(';')); allStrings[i] = allStrings[i].Substring(allStrings[i].IndexOf(';') + 1); string toCity = allStrings[i].Substring(0, allStrings[i].IndexOf(';')); allStrings[i] = allStrings[i].Substring(allStrings[i].IndexOf(';') + 1); double weightFromCity; try { weightFromCity = double.Parse(allStrings[i].Substring(0, allStrings[i].IndexOf(';'))); } catch (Exception e) { weightFromCity = Double.PositiveInfinity; } allStrings[i] = allStrings[i].Substring(allStrings[i].IndexOf(';') + 1); double weightToCity; try { weightToCity = double.Parse(allStrings[i]); } catch (Exception e) { weightToCity = Double.PositiveInfinity; } adjacencyList.Insert(fromCity, toCity, weightFromCity, weightToCity); } return(adjacencyList); }
static void Main(string[] args) { AdjacencyList list = FileHandler.CreateAdjacencyList(@"..\..\..\Cities.txt"); Console.WriteLine("Матрица смежности:"); for (int i = 0; i < list.GetAdjacencyMatrix().GetLength(0); i++) { for (int j = 0; j < list.GetAdjacencyMatrix().GetLength(1); j++) { Console.Write($"{list.GetAdjacencyMatrix()[i,j]} "); } Console.WriteLine(); } Console.WriteLine(); AlgorithmFloyd.FindShortestPathMatrix(list); Console.WriteLine("Матрица кратчайших путей:"); AlgorithmFloyd.PrintShortestPathMatrix(); }