示例#1
0
文件: Program.cs 项目: Ivorankov/DSA
        static void Main()
        {
            var input = Console.ReadLine()
                .Split(' ')
                .Select(int.Parse)
                .ToArray();

            var hospitalLocs = Console.ReadLine()
                .Split(' ')
                .Select(int.Parse)
                .ToArray();

            var graph = new Dictionary<Node, List<Point>>();

            for (int i = 0; i < input[1]; i++)
            {
                var currentPoints = Console.ReadLine()
                .Split(' ')
                .Select(int.Parse)
                .ToArray();
                var nodeA = new Node(currentPoints[0]);
                if (graph.ContainsKey(nodeA))
                {
                    graph[nodeA].Add(new Point(nodeA, currentPoints[2]));
                }
                else
                {
                    graph.Add(nodeA, new List<Point>() { new Point(nodeA, currentPoints[2]) });
                }

            }
        }
示例#2
0
文件: Program.cs 项目: Ivorankov/DSA
        private static void DijkstraAlgorithm(Dictionary<Node, List<Point>> graph, Node source)
        {
            var queue = new PriorityQueue<Node>();

            foreach (var node in graph)
            {
                node.Key.DijkstraDistance = double.PositiveInfinity;
            }

            source.DijkstraDistance = 0.0d;
            queue.Enqueue(source);

            while (queue.Count != 0)
            {
                var currentNode = queue.Dequeue();

                if (double.IsPositiveInfinity(currentNode.DijkstraDistance))
                {
                    break;
                }

                foreach (var neighbor in graph[currentNode])
                {
                    var potDistance = currentNode.DijkstraDistance + neighbor.Distance;
                    if (potDistance < neighbor.Node.DijkstraDistance)
                    {
                        neighbor.Node.DijkstraDistance = potDistance;
                        queue.Enqueue(neighbor.Node);
                    }
                }
            }
        }