Question 1 Minimum Moves to Spread Stones Over Grid

Method 4 Bi-Directional BFS

class BFSIterator {
    // 功能: next() hasNext()
    private Deque<Node> queue;
    private Map<Node, Integer> visited; // 每个点,从起点出发到这个点的最短路径
    
    public BFSIterator(Node init) {
        this.queue = new LinkedList<>();
        this.visited = new HashMap<>();
        queue.offer(init);
        visited.put(init, 0);
    }

}

poblic int biDirectionalBFS(Node start, Node end) {
    BFSIterator bfsFromStart = new BFSIterator(start);
    BFSIterator bfsFromEnd = new BFSIterator(end);
    
    while (bfsFromSTart.hasNext() && bfsFromEnd.hasNext()) {
        int startSideMakeMove = bfsFromStart.next(bfsFromEnd);
        if (startSideMakeMove != NOT_MET_IN_THISROUND) {
            return startSideMakeMove;
        }
        int endSideMakeMove = bfsFromStart.next(bfsFromStart);
        if (endSideMakeMove != NOT_MET_IN_THISROUND) {
            return endSideMakeMove;
        }
    }
    return NOT_MET_IN_THISROUND;
}

Last updated