protected override void Init()
 {
     base.Init();
     queue = new PriorityQueuList <IVertex <V> >(new VertexComparer());
     foreach (var vertex in graph.Vertices)
     {
         queue.Enqueue(vertex);
     }
 }
        public static ListNode MergeKLists(ListNode[] lists)
        {
            if (lists.Length == 0)
            {
                return(null);
            }

            ListNode head = null;
            ListNode cur  = null;

            // min queue
            var priorityQueue = new PriorityQueuList <QueueNode>((x, y) => x.node.val - y.node.val);

            for (int i = 0; i < lists.Length; i++)
            {
                if (lists[i] != null)
                {
                    priorityQueue.Enqueue(new QueueNode(lists[i], i));
                }
            }

            while (!priorityQueue.Empty)
            {
                var minNode = priorityQueue.Dequeue();
                var loc     = minNode.location;
                var newNode = minNode.node;

                if (head == null)
                {
                    cur  = newNode;
                    head = newNode;
                }
                else
                {
                    cur.next = newNode;
                    cur      = cur.next;
                }

                lists[loc] = lists[loc].next;
                if (lists[loc] != null)
                {
                    priorityQueue.Enqueue(new QueueNode(lists[loc], loc));
                }
            }
            return(head);
        }