Untitled
unknown
plain_text
3 years ago
1.8 kB
7
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...