コード例 #1
0
        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());
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: ListParser.cs プロジェクト: sanyabas/Combinatorial
        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);
        }