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("できゅーしすぎなのおおおおおお"));
        }
Пример #4
0
    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();
    }