Untitled

 avatar
unknown
plain_text
2 years ago
1.8 kB
4
Indexable
Tôi thấy có một số vấn đề trong lời giải của bạn. Đầu tiên, trong hàm `BFS`, khi bạn thêm `nextX` và `nextY` vào hàng đợi, bạn cần kiểm tra xem `map[nextX][nextY]` có bằng 1 hay không. Nếu không phải là 1 thì không thể di chuyển đến ô đó. Thứ hai, khi bạn cập nhật giá trị `visit[nextX][nextY]`, bạn cần sử dụng `visit[nextX][nextY] = visit[curX][curY] + 1;` thay vì `visit[nextX][nextX] = visit[curX][curY] + 1;`. Cuối cùng, bạn cần thêm `nextX` và `nextY` vào hàng đợi sau khi cập nhật giá trị `visit[nextX][nextY]`.

Sau khi sửa các vấn đề trên, hàm `BFS` của bạn sẽ trông như thế này:

```java
public static void BFS(int i, int j) {
    Queue<Integer> queue = new LinkedList<>();
    queue.add(i);
    queue.add(j);
    visit[i][j] = 1;
    while (!queue.isEmpty()) {
        int curX = queue.poll();
        int curY = queue.poll();
        for (int k = 0; k < 4; k++) {
            int nextX = curX + dx[k];
            int nextY = curY + dy[k];
            if (nextX >= 0 && nextX < N && nextY >= 0 && nextY < N) {
                if (visit[nextX][nextY] == 0 && map[nextX][nextY] == 1) {
                    visit[nextX][nextY] = visit[curX][curY] + 1;
                    queue.add(nextX);
                    queue.add(nextY);
                }
            }
        }
    }
    int count = 0;
    int Max = Integer.MIN_VALUE;
    for (int k = 0; k < G; k++) { // xet G vi tri mo vang, xem vi tri co
                                    // visit lon nhat
        if (visit[goldX[k]][goldY[k]] > 0) {
            count++;
            Max = Math.max(Max, visit[goldX[k]][goldY[k]]);
        }
    }
    if (count == G) {
        if (Answer == -1 || Answer > Max) {
            Answer = Max;
        }
    }
}
```
Editor is loading...