public static void Main() { var graph = new Graph(4); var weights = new Dictionary <Edge, double>(); weights[graph.Connect(0, 1)] = 1; weights[graph.Connect(0, 2)] = 2; weights[graph.Connect(0, 3)] = 6; weights[graph.Connect(1, 3)] = 4; weights[graph.Connect(2, 3)] = 2; var path = Dijkstra(graph, weights, graph[0], graph[3]).Select(n => n.NodeNumber); CollectionAssert.AreEqual(new[] { 0, 2, 3 }, path.ToArray()); }
public static Graph MakeGraph(params int[] incidentNodes) { var graph = new Graph(incidentNodes.Max() + 1); for (int i = 0; i < incidentNodes.Length - 1; i += 2) { graph.Connect(incidentNodes[i], incidentNodes[i + 1]); } return(graph); }
public override Graph ParseGraph() { var lines = File.ReadAllLines(fileName); var nodesCount = int.Parse(lines[0]); var graph = new Graph(nodesCount); for (var i = 1; i <= nodesCount; i++) { var splittedLine = lines[i].Split(' ').Select(int.Parse).ToArray(); for (var j = 0; j < splittedLine.Length - 1; j += 2) { var(neighbourCount, weight) = (splittedLine[j], splittedLine[j + 1]); graph.Connect(graph[i], graph[neighbourCount], weight); } } var startNumber = int.Parse(lines[lines.Length - 2]); var finishNumber = int.Parse(lines[lines.Length - 1]); graph.Start = graph[startNumber]; graph.Finish = graph[finishNumber]; return(graph); }