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); } } } }
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; } } } }
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"); }
public ForegroundNotificationService() { _workQueue = new PriorityQueue(); _lastProcessedTimeInMS = Environment.TickCount; Task.Factory.SafeStartNewFromAsync(ProcessAsync, CancellationToken.None, TaskScheduler.Default); }
public void Remove() { PriorityQueue<int> p = new PriorityQueue<int>(delegate(int i, int j) { return i - j; }); Random r = new Random(); for(int i = 0; i < 10000; ++i) { p.Enqueue(r.Next(1000)); } int removed = 0; while(removed < 100) { int count = p.Count; p.Remove(r.Next(1000)); if(count > p.Count) { ++removed; } } int item = p.Dequeue(); while(p.Count > 0) { int next = p.Dequeue(); if(next < item) { Assert.Fail("bad order detected"); } } }
static void Main(string[] args) { var pq = new PriorityQueue<int, int>(); pq.Insert(new KeyValuePair<int, int>(0, 0)); pq.Insert(new KeyValuePair<int, int>(1, 1)); pq.Insert(new KeyValuePair<int, int>(4, 5)); pq.Insert(new KeyValuePair<int, int>(1, 1)); pq.Insert(new KeyValuePair<int, int>(3, 3)); pq.Insert(new KeyValuePair<int, int>(2, 2)); pq.Insert(new KeyValuePair<int, int>(5, 5)); pq.Insert(new KeyValuePair<int, int>(4, 4)); KeyValuePair<int, int> pair; for (var i = 0; i < 10; i++) { if (pq.TryExtractMinimum(out pair)) { Console.WriteLine("key: {0}, value: {1}", pair.Key, pair.Value); } else { Console.WriteLine("Not extracted"); } } Console.ReadLine(); }
static void Solve(Dictionary<int, Node> allNodes, Node startNode) { foreach (var node in allNodes.Values) { node.Distance = int.MaxValue; } startNode.Distance = 0; PriorityQueue<Node> nodes = new PriorityQueue<Node>(); nodes.Enqueue(startNode); while (nodes.Count > 0) { var node = nodes.Dequeue(); if (node.Distance == int.MaxValue) { break; } for (int i = 0; i < node.Connections.Count; i++) { var newDistance = node.Distance + node.Connections[i].Distance; if (newDistance < node.Connections[i].ToNode.Distance) { node.Connections[i].ToNode.Distance = newDistance; nodes.Enqueue(node.Connections[i].ToNode); } } } }
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); } } } }
public void Enqueue_into_empty_queue() { var queue = new List<PriorityQueue<string>.Element>(); var sut = new PriorityQueue<string>(queue); sut.Enqueue("a", 10); Assert.That(queue, Is.EqualTo(new[]{new PriorityQueue<string>.Element("a", 10)})); }
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(); }
// 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); } } } }
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); } }
public static IEnumerable<int?> Find(DirectedWeightedGraph graph, int source) { var dist = new int?[graph.NodesCount]; dist[source] = 0; var closestNodes = new PriorityQueue<int, int>(dist.Select((d, i) => new KeyValuePair<int, int>(i, d.GetValueOrDefault(int.MaxValue)))); var exploredNodes = new HashSet<int>(); while (closestNodes.Count != 0) { var node = closestNodes.ExtractHighestPriorityElement(); exploredNodes.Add(node); foreach (var edge in graph.GetEdges(node).Where(e => !exploredNodes.Contains(e.EndNode))) { if (dist[node] != null) { var alt = dist[node].Value + edge.Weight; if (alt < dist[edge.EndNode].GetValueOrDefault(int.MaxValue)) { dist[edge.EndNode] = alt; closestNodes.ChangePriority(edge.EndNode, alt); } } } } return dist; }
/// <summary> /// Creates a new EventQueue instance and starts the main thread. /// </summary> public EventQueue() { q = new PriorityQueue<INaoEvent>(4); thread = new Thread(new ThreadStart(Run)); thread.IsBackground = true; thread.Start(); }
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(); } }
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); } } } }
public WordTranslation(string orginalWord, IEnumerable<Tuple<int, Word>> words) { OrginalWord = orginalWord; WordsList = new PriorityQueue<int, Word>(Comparer<int>.Default); CompleteList(words); }
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(); }
public static void Main(string[] args) { PriorityQueue<Student> payQueue = new PriorityQueue<Student>(); for (int i = 0; i < 5; i++) { payQueue.Enqueue(new Student("Student" + i, 12, true)); } for (int i = 5; i < 10; i++) { payQueue.Enqueue(new Student("Student" + i, 12, false)); } for (int i = 0; i < 5; i++) { payQueue.Enqueue(new Student("StudentVer2" + i, 12, true)); } int payQueueLength = payQueue.Count; for (int i = 0; i < payQueueLength; i++) { Console.WriteLine(payQueue.Dequeue().ToString()); } }
public async void OnTick(IWeiboAccessToken at) { if (_tick++%57 != 0) return; var resp = await WeiboClient.suggestions_statuses_hot_async(at.get(), 20, true, 1, _type); if(++_type == hot_status_type.count) _type = hot_status_type.musement; if (resp.Failed() || resp.Value.Length == 0) return; var queue = new PriorityQueue<long, Status>(); foreach(var s in resp.Value) { queue.Enqueue(EvalMark(s),s); } while (queue.Size > 5) queue.Dequeue(); while(!queue.IsEmpty) { var s = queue.Dequeue(); var ws = new WeiboStatus(); ws.assign_sina(s); await DispatcherHelper.UIDispatcher.BeginInvoke(DispatcherPriority.SystemIdle, (Action) (() => { if(statuses.Count > 10) statuses.RemoveAt(0); statuses.Add(ws); })); } }
static void Main(string[] args) { PriorityQueue<int> queue = new PriorityQueue<int>(); queue.Enqueue(5); queue.Enqueue(3); queue.Enqueue(16); queue.Enqueue(4); queue.Enqueue(8); queue.Enqueue(10); queue.Enqueue(20); queue.Enqueue(33); queue.Enqueue(6); queue.Enqueue(24); queue.Enqueue(68); queue.Enqueue(19); queue.Enqueue(61); queue.Enqueue(638); queue.Enqueue(213); queue.Enqueue(2132); int count = queue.Count; Console.WriteLine("Get elements from Priority queue one by one:"); for (int i = 0; i < count; i++) { Console.WriteLine(queue.Dequeue()); } }
public void PriorityQueueEnqueueOneElementIncrementsCount() { var q = new PriorityQueue<int>(); var count = q.Count; q.Enqueue(AnyInt); Assert.Equal(count + 1, q.Count); }
public void CopyConstructorTest() { List<string> collection = new List<string> { "Granville", "Barnett", "Luca", "Del", "Tongo" }; PriorityQueue<string> actual = new PriorityQueue<string>(collection); Assert.AreEqual(5, actual.Count); }
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); } } } }
public static int distance(bool[,] passable, int startX, int startY, int goalX, int goalY) { int[,] distanceMatrix = new int[passable.GetLength(0), passable.GetLength(1)]; for (int i = 0; i < distanceMatrix.GetLength(0); i++) { for (int j = 0; j < distanceMatrix.GetLength(1); j++) { distanceMatrix[i, j] = -1; } } distanceMatrix[startX, startY] = 0; PriorityQueue<Node> openSet = new PriorityQueue<Node>(); Node initial = new Node(startX, startY, 0, euclideanDistance(startX, startY, goalX, goalY)); openSet.Add(initial); while (true) { if (openSet.IsEmpty()) { // we failed to find the goal return -1; } Node current = openSet.PopFront(); if (current.x == goalX && current.y == goalY) { // we found it! return current.costToGetHere; } // search all the neighbours List<Node> neighbours = current.generateNeighbours(passable, distanceMatrix, goalX, goalY); openSet.AddRange(neighbours); } }
public void AddRemove() { PriorityQueue<string, int> pq = new PriorityQueue<string, int>(10); Assert.AreEqual<int>(10, pq.Capacity); Assert.AreEqual<int>(0, pq.Count); pq.Enqueue("A", 1); Assert.AreEqual<int>(1, pq.Count); Assert.AreEqual<string>("A", pq.Dequeue(false)); pq.Enqueue("B", 2); Assert.AreEqual<int>(2, pq.Count); Assert.AreEqual<string>("B", pq.Dequeue(false)); pq.Enqueue("C", 1); Assert.AreEqual<int>(3, pq.Count); Assert.AreEqual<string>("B", pq.Dequeue(false)); Assert.AreEqual<string>("B", pq.Dequeue()); Assert.AreEqual<string>("A", pq.Dequeue(true)); Assert.AreEqual<string>("C", pq.Dequeue()); Assert.AreEqual<int>(0, pq.Count); Assert.AreEqual<int>(10, pq.Capacity); pq.Enqueue("A", 1); pq.Enqueue("B", 2); pq.Enqueue("C", 3); pq.Clear(); Assert.AreEqual<int>(0, pq.Count); Assert.AreEqual<int>(10, pq.Capacity); }
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); } } } }
public int[] makeNextMove(Grid board) { PriorityQueue<MoveNode> q = new PriorityQueue<MoveNode>(); q.initialize(expandNodes(board, null, 1)); MoveNode current = q.Dequeue(); while ((current.Ply < depth) && !(q.isEmpty)) { MoveNode next = q.Dequeue(); if(next.Rank> current.Rank) { current = next; MoveNode[] expnd = expandNodes(current.Board, current, (current.Ply + 1)); if(expnd.Length > 0) q.EnqueueArray(expnd); } } while(current.Ply > 1) { current = current.PreviousMove; } //this will be the best move to make after expanding down to depth plys. int[] result = { current.Group.X, current.Group.Y }; Console.WriteLine("rank: " + current.Rank); return result; }
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; }
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()); } }