本文整理汇总了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();
}
示例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;
}
示例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;
}
}
}
}
示例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();
}
示例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);
}
}
}
}
示例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);
}
}
}
}
示例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());
}
示例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);
}
}
}
}
示例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");
}
示例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);
}
}
}
}
示例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();
}
}
示例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);
}
}
}
}
示例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);
}
}
示例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);
}
}
}
}
示例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());
}
}