Untitled
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...