public void executePQ(GraphNode<T> currentNode) {
        //BinaryHeap<GraphNode<T>> minHeap = new BinaryHeap<>(graph.getNumV(), BinaryHeap.HeapType.MIN_HEAP);

        //minHeap.enqueue(currentNode);

        //for (GraphNode<T> node:graph.getNodes()){
        //    node.distance = IntegerAlgs.MAX_VALUE;
        //}

        // create enqueue of all unvisited nodes
        Set<GraphNode<T>> unvisited = new HashSet<>();
        unvisited.addAll(graph.getNodes());

        //currentNode.distance = 0;
        //minSpanningNodes.enqueue(currentNode);
        //currentNode.visited = true;

        // take out the current node
        unvisited.remove(currentNode);
        currentNode.visited = true;

        // calculate shortest distance to each node from source
        while(unvisited.size() > 0) {
            // for each currenty visited node find cheapest edge using PQ and enqueue to span
            BinaryHeap<GraphEdge<T>> minEdgeHeap = new BinaryHeap<>(graph.getNumV(), BinaryHeap.HeapType.MIN_HEAP);
            List<GraphNode<T>> neighborNodes = this.graph.getNeighbors(currentNode);
            for (GraphNode<T> neighborNode : neighborNodes) {
                minEdgeHeap.add(graph.getEdge(currentNode, neighborNode));
            }

            // find min unvisited edge
            GraphEdge<T> minEdge = minEdgeHeap.pop();
            while (minEdge != null && !unvisited.contains(minEdge.dstNode))
                minEdge = minEdgeHeap.pop();

            if (minEdge != null) {
                // Adding unvisited min edge to MST
                minSpanningEdges.add(minEdge);

                currentNode = minEdge.dstNode;
                unvisited.remove(currentNode);
                 currentNode.visited = true;
            } else {
                //ok no more min edges unvisited along current route. Find another unvisited node
                Iterator<GraphNode<T>> iterator = unvisited.iterator();
                GraphNode<T> unvisitedNode = iterator.next();
                List<GraphNode<T>> neighbors = graph.getNeighbors(unvisitedNode);
                for (GraphNode<T> neighbor:neighbors)
                    if (!unvisited.contains(neighbor))
                        currentNode = neighbor;
            }
        }
    }