当前位置: 首页>>代码示例>>C#>>正文


C# PriorityQueue.Enqueue方法代码示例

本文整理汇总了C#中System.Collections.Generic.PriorityQueue.Enqueue方法的典型用法代码示例。如果您正苦于以下问题:C# PriorityQueue.Enqueue方法的具体用法?C# PriorityQueue.Enqueue怎么用?C# PriorityQueue.Enqueue使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在System.Collections.Generic.PriorityQueue的用法示例。


在下文中一共展示了PriorityQueue.Enqueue方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: WorkPriorityQueue

        public void WorkPriorityQueue()
        {
            //throw new NotImplementedException();
            PriorityQueue<int> testQueue = new PriorityQueue<int>();
            testQueue.Enqueue(1, 0);
            testQueue.Enqueue(2, 0);
            testQueue.Enqueue(3, 0);
            testQueue.Enqueue(4, 0);
            testQueue.Enqueue(5, 0);

            testQueue.Enqueue(1, 2);
            testQueue.Enqueue(2, 2);
            testQueue.Enqueue(3, 3);
            testQueue.Enqueue(4, 3);
            testQueue.Enqueue(5, 5);

            Console.WriteLine();
            Console.WriteLine("First test {0}", testQueue.First());  // 1
            Console.WriteLine("Last test {0}", testQueue.Last());    // 5

            Console.WriteLine("First test {0} с приоритетом {1}", testQueue.First(2), 2);  //1
            Console.WriteLine("Last test {0} с приоритетом {1}", testQueue.Last(3), 3);    // 4

            int p1 = 0;
            Console.WriteLine("число элементов с приоритетом {0} = {1}", p1, testQueue.GetCount(p1));  //5
            p1 = 2;
            Console.WriteLine("число элементов с приоритетом {0} = {1}", p1, testQueue.GetCount(p1));  //2
            p1 = 5;
            Console.WriteLine("число элементов с приоритетом {0} = {1}", p1, testQueue.GetCount(p1));  //1

            Console.ReadKey();
        }
开发者ID:vbre,项目名称:tasks_cs2,代码行数:32,代码来源:EncapsulationExercises.cs

示例2: FindPath

        public static Path<Node> FindPath(
            Node start,
            Node destination,
            Func<Node, Node, double> distance,
            Func<Node, double> estimate)
        {
            var closed = new HashSet<Vector2>();
            var queue = new PriorityQueue<double, Path<Node>>();
            queue.Enqueue(0, new Path<Node>(start));

            while (!queue.IsEmpty)
            {
                var path = queue.Dequeue();
                if (closed.Contains(path.LastStep.Point))
                {
                    continue;
                }

                if (path.LastStep.Point.Equals(destination.Point))
                    return path;

                closed.Add(path.LastStep.Point);
                foreach (Node n in path.LastStep.Neightbours)
                {
                    double d = distance(path.LastStep, n);
                    var newPath = path.AddStep(n, d);
                    queue.Enqueue(newPath.TotalCost + estimate(n), newPath);
                }
            }

            return null;
        }
开发者ID:CONANLXF,项目名称:AIO,代码行数:32,代码来源:Core.cs

示例3: PathFinder

        public PathFinder(Grid graph, Cell start, Cell goal)
        {
            //  Priority Queue which contains cells that are candidates for examining, lowest priority to the node with the lowest f value
            var frontier = new PriorityQueue<Cell>();
            frontier.Enqueue(start, 0);

            cameFrom[start] = start;
            costSoFar[start] = 0;

            while (frontier.Count > 0)
            {
                var current = frontier.Dequeue();

                // Exit the search if goal have discovered
                if (current.Equals(goal)) { break; }

                // discovers the neighbours
                foreach (var next in graph.Neighbors(current))
                {
                    int newCost = costSoFar[current] + graph.Cost(current, next);

                    if (!costSoFar.ContainsKey(next) || newCost < costSoFar[next])
                    {
                        costSoFar[next] = newCost;

                        // f = g + h
                        int priority = newCost + Heuristic(next, goal);

                        frontier.Enqueue(next, priority);
                        cameFrom[next] = current;
                    }
                }
            }
        }
开发者ID:TeamViperz,项目名称:Tanks,代码行数:34,代码来源:PathFinder.cs

示例4: Main

        public static void Main()
        {
            // 1.
            var priorityQueue = new PriorityQueue<int>();
            priorityQueue.Enqueue(2);
            priorityQueue.Enqueue(7);
            priorityQueue.Enqueue(17);
            priorityQueue.Enqueue(19);
            priorityQueue.Enqueue(26);
            priorityQueue.Enqueue(29);
            priorityQueue.Dequeue();
            priorityQueue.Enqueue(3);
            priorityQueue.Enqueue(1);
            priorityQueue.Dequeue();
            priorityQueue.Enqueue(25);
            priorityQueue.Enqueue(36);
            priorityQueue.Dequeue();

            Console.WriteLine();

            // 2.
            PrintFirst20Products();

            Console.WriteLine();

            // 3.
            CountWords();
        }
开发者ID:TeeeeeC,项目名称:TelerikAcademy2015-2016,代码行数:28,代码来源:Startup.cs

示例5: DijkstraAlgorithm

        public static void DijkstraAlgorithm(Dictionary<Node, List<Connection>> graph, Node source)
        {
            PriorityQueue<Node> queue = new PriorityQueue<Node>();
            foreach (var node in graph)
            {
                node.Key.DijkstraDistance = long.MaxValue;
            }

            source.DijkstraDistance = 0;
            queue.Enqueue(source);

            while (queue.Count != 0)
            {
                Node currentNode = queue.Dequeue();
                if (currentNode.DijkstraDistance == long.MaxValue)
                {
                    break;
                }

                foreach (var connection in graph[currentNode])
                {
                    var potDistance = currentNode.DijkstraDistance + connection.Distance;
                    if (potDistance < connection.ToNode.DijkstraDistance)
                    {
                        connection.ToNode.DijkstraDistance = potDistance;
                        queue.Enqueue(connection.ToNode);
                    }
                }
            }
        }
开发者ID:emilti,项目名称:Telerik-Academy-My-Courses,代码行数:30,代码来源:MainProgram.cs

示例6: DijkstraAlgorithm

        public static void DijkstraAlgorithm(Dictionary<Node, List<Connection>> 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);
                    }
                }
            }
        }
开发者ID:VDGone,项目名称:TelerikAcademy-2,代码行数:32,代码来源:FriendsOfPesho.cs

示例7: TestBasicFunctionality

        public void TestBasicFunctionality()
        {
            var q = new PriorityQueue<int>();
            Assert.AreEqual(0, q.Count);
            Assert.AreEqual(0, q.Capacity);
            Assert.Throws<InvalidOperationException>(() => q.Peek());
            Assert.Throws<InvalidOperationException>(() => q.Dequeue());

            q.Enqueue(5);
            q.Enqueue(2);
            q.Enqueue(4);

            Assert.AreEqual(3, q.Count);
            Assert.IsTrue(q.Capacity >= 3);

            Assert.IsTrue(q.Contains(2));
            Assert.IsFalse(q.Contains(3));

            Assert.AreEqual(3, q.ToArray().Length);
            CollectionAssert.AreEqual(q.ToArray(), q);

            Assert.AreEqual(2, q.Peek());

            Assert.AreEqual(2, q.Dequeue());
            Assert.AreEqual(4, q.Dequeue());
            Assert.AreEqual(5, q.Dequeue());
        }
开发者ID:GHScan,项目名称:DailyProjects,代码行数:27,代码来源:PriorityQueueTest.cs

示例8: FindMinimalPaths

        public static void FindMinimalPaths(Dictionary<Node, List<Street>> graph, Node source)
        {
            PriorityQueue<Node> queue = new PriorityQueue<Node>();

            foreach (var node in graph)
            {
                if (source.ID != node.Key.ID)
                {
                    node.Key.DijkstraDistance = ulong.MaxValue;
                }
            }

            source.DijkstraDistance = 0;
            queue.Enqueue(source);

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

                foreach (var neighbour in graph[currentNode])
                {
                    ulong potDistance = currentNode.DijkstraDistance + neighbour.Distance;

                    if (potDistance < neighbour.Node.DijkstraDistance)
                    {
                        neighbour.Node.DijkstraDistance = potDistance;
                        // adds only modified elements in the queue
                        // thus reordering the queue after each iteration is avoided
                        queue.Enqueue(neighbour.Node);
                    }
                }
            }
        }
开发者ID:psotirov,项目名称:TelerikAcademyProjects,代码行数:33,代码来源:Dijkstra.cs

示例9: PriorityQueue

        public void PriorityQueue()
        {
            PriorityQueue<int> pq = new PriorityQueue<int>(LinqExt.TakeMore);
            pq.Enqueue(1, 1);
            pq.Enqueue(9, 9);
            pq.Enqueue(2, 2);
            pq.Enqueue(5, 5);

            Assert.IsTrue(pq.First() == 9, "Wrong Priority");
            Assert.IsTrue(pq.Dequeue() == 9, "Wrong Priority");
            Assert.IsTrue(pq.Dequeue() == 5, "Wrong Priority");

            pq.ChangePriority(1, 29);
            Assert.IsTrue(pq.First() == 1, "Wrong Priority, 1 should be first priority now with priority 29");

            pq.Enqueue(3, 2); //add item with same priority
            pq.Enqueue(4, 2); //add item with same priority

            Assert.IsTrue(pq.Last() == 4, "Wrong Priority, 4 should be last");

            pq.Enqueue(30, 30); // mix case
            Assert.IsTrue(pq.First() == 30, "Wrong Priority, 30 should be first priority");

            pq.Enqueue(31, 30); // mix case
            Assert.IsTrue(pq.First() == 30, "Wrong Priority, 30 should still be first priority");

            pq.Enqueue(5, 2); //add item with same priority
            pq.Enqueue(6, 2); //add item with same priority

            Assert.IsTrue(pq.Last() == 6, "Wrong Priority, 6 should be last");
        }
开发者ID:nantcom,项目名称:projecteuler,代码行数:31,代码来源:UtilityTest.cs

示例10: Dijkstra

        private static void Dijkstra(Graph<int> graph, Node<int> source)
        {
            var queue = new PriorityQueue<Node<int>>();
            foreach (var node in graph.NodesCollection.Keys)
            {
                node.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 currentNode.Collection)
                {
                    var potDistance = currentNode.DijkstraDistance + neighbor.Distance;
                    if (potDistance < neighbor.Target.DijkstraDistance)
                    {
                        neighbor.Target.DijkstraDistance = potDistance;
                        queue.Enqueue(neighbor.Target);
                    }

                }
            }
        }
开发者ID:Producenta,项目名称:TelerikAcademy,代码行数:32,代码来源:Startup.cs

示例11: Main

        public static void Main()
        {
            //Heap test

            //Heap<int> testHeap = new Heap<int>();
            //testHeap.Push(3);
            //testHeap.Push(4);
            //testHeap.Push(5);
            //testHeap.Push(1);
            //testHeap.Push(6);

            //while (testHeap.Count > 0)
            //{
            //    testHeap.Pop();
            //    testHeap.Print();
            //}

            //Queue test
            PriorityQueue<int> queue = new PriorityQueue<int>();
            queue.Enqueue(3);
            queue.Enqueue(4);
            queue.Enqueue(5);
            queue.Enqueue(1);
            queue.Enqueue(6);

            queue.Print();

            while (queue.Count > 0)
            {
                queue.Dequeue();
                queue.Print();
            }
        }
开发者ID:vanndann,项目名称:TelerikAcademy,代码行数:33,代码来源:Program.cs

示例12: DijkstraAlgorithm

        // Dijkstra's shortest paths algorithm, implemented
        // with priority queue. Running time: O(M * log M)
        // Learn more at: https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm#Using_a_priority_queue
        public static void DijkstraAlgorithm(
            Dictionary<Node, List<Edge>> graph,
            Node sourceNode)
        {
            var queue = new PriorityQueue<Node>();

            foreach (var node in graph)
            {
                node.Key.Distance = double.PositiveInfinity;
            }
            sourceNode.Distance = 0.0d;
            queue.Enqueue(sourceNode);

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

                if (double.IsPositiveInfinity(currentNode.Distance))
                {
                    // All nodes processed --> algorithm finished
                    break;
                }

                foreach (var childEdge in graph[currentNode])
                {
                    var newDistance = currentNode.Distance + childEdge.Distance;
                    if (newDistance < childEdge.Node.Distance)
                    {
                        childEdge.Node.Distance = newDistance;
                        childEdge.Node.PreviousNode = currentNode;
                        queue.Enqueue(childEdge.Node);
                    }
                }
            }
        }
开发者ID:iliankostov,项目名称:Algorithms,代码行数:38,代码来源:DijkstraPriorityQueue.cs

示例13: Main

        static void Main(string[] args)
        {
            var queue = new PriorityQueue<int>();

            queue.Enqueue(5);
            queue.Enqueue(8);
            queue.Enqueue(3);
            queue.Enqueue(4);
            queue.Enqueue(11);

            foreach (var i in queue)
            {
                Console.WriteLine(i);
            }


            Console.WriteLine("*******Removed value:{0}",queue.Dequeue());
            foreach (var i in queue)
            {
                Console.WriteLine(i);
            }
            Console.WriteLine("*******Removed value:{0}", queue.Dequeue());
            foreach (var i in queue)
            {
                Console.WriteLine(i);
            }
        }
开发者ID:GenoGenov,项目名称:TelerikAcademyAssignments,代码行数:27,代码来源:Program.cs

示例14: DijkstraAlgorithm

        public static void DijkstraAlgorithm(Dictionary<Node, List<Connection>> graph, Node source)
        {
            PriorityQueue<Node> queue = new PriorityQueue<Node>();

            foreach (var item in graph)
            {
                item.Key.DijkstraDistance = long.MaxValue;
            }

            queue.Enqueue(source);
            source.DijkstraDistance = 0;

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

                foreach (var connection in graph[currentNode])
                {
                    var dist = connection.Distance + currentNode.DijkstraDistance;

                    if (dist < connection.ToNode.DijkstraDistance)
                    {
                        connection.ToNode.DijkstraDistance = dist;
                        queue.Enqueue(connection.ToNode);
                    }
                }
            }
        }
开发者ID:atanas-georgiev,项目名称:Data-Structures-and-Algorithms-Homeworks,代码行数:28,代码来源:EntryPoint.cs

示例15: Main

        static void Main(string[] args)
        {
            //var queue = new PriorityQueue<int>();
            //queue.Enqueue(99);
            //queue.Enqueue(2);
            //queue.Enqueue(10);
            //queue.Enqueue(25);
            //queue.Enqueue(11);
            //queue.Enqueue(3);
            //queue.Enqueue(7);
            //queue.Enqueue(22);
            //queue.Enqueue(5);
            //queue.Enqueue(1);
            //queue.Enqueue(45);
            //queue.Enqueue(31);

            var queue = new PriorityQueue<Student>();

            queue.Enqueue(new Student() { Name = "Ivan", Age = 27 });
            queue.Enqueue(new Student() { Name = "Pesho", Age = 21 });
            queue.Enqueue(new Student() { Name = "Dragan", Age = 24 });
            queue.Enqueue(new Student() { Name = "Gosho", Age = 18 });
            queue.Enqueue(new Student() { Name = "Todor", Age = 25 });

            while (queue.Count > 0)
            {
                Console.WriteLine(queue.Dequeue().ToString());
            }
        }
开发者ID:flyer87,项目名称:Data_structures,代码行数:29,代码来源:Program.cs


注:本文中的System.Collections.Generic.PriorityQueue.Enqueue方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。