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); }