public void EnqueueTest(T[] inputs) { var rndList = inputs.OrderBy(i => Guid.NewGuid()).Select((x, index) => new { x, index }).ToArray(); var heap = new SelfPriorityQueue <T>(); foreach (var item in rndList) { heap.Enqueue(item.index, item.x); } Assert.AreEqual(inputs.Length, heap.Count); Console.WriteLine($"入力:{inputs.Length}, 出力:{heap.Count}"); }
public void DequeueTest(T[] inputs) { var rndList = inputs.OrderBy(i => Guid.NewGuid()).Select((x, index) => new { x, index }).ToArray(); var heap = new SelfPriorityQueue <T>(); foreach (var item in rndList) { heap.Enqueue(item.index + 1, item.x); } foreach (var input in rndList.Reverse()) { var item = heap.Dequeue(); Assert.AreEqual(input.x, item); Console.WriteLine($"{input.x}, {item}"); } }
public void DequeueException(T[] inputs) { var rndList = inputs.OrderBy(i => Guid.NewGuid()).Select((x, index) => new { x, index }).ToArray(); var heap = new SelfPriorityQueue <T>(); foreach (var item in rndList) { heap.Enqueue(item.index, item.x); } foreach (var input in rndList.Reverse()) { var item = heap.Dequeue(); } Assert.That(() => { heap.Dequeue(); }, Throws.Exception.With.Message.EqualTo("できゅーしすぎなのおおおおおお")); }
public override void PartOne() { var graph = Input.ToDigraph(s => s[5], s => s[36]); var queue = new SelfPriorityQueue <Vertex <char, DirectedEdge <char> > >(Comparing <Vertex <char, DirectedEdge <char> > > .By(vertex => vertex.Value)); foreach (var vertex in graph.Where(vertex => !graph.HasIncomingEdges(vertex))) { queue.Enqueue(vertex); } while (queue.Count > 0) { var vertex = queue.Dequeue(); Write(vertex.Value); var next = vertex.Neighbors.ToList(); graph.RemoveVertex(vertex); foreach (var v in next.Where(v => !graph.HasIncomingEdges(v))) { queue.Enqueue(v); } } NewLine(); }