Những gì tôi đang cố gắng làm là đếm số lần di chuyển để đạt được mục tiêu bằng đường đi ngắn nhất. Nó phải được thực hiện bằng cách sử dụng tìm kiếm đầu tiên. Tôi đặt lưới 8x8 vào một mảng 2d được lấp đầy với một trong bốn ký tự, E cho trống (có thể di chuyển vào những điểm này), B cho bị chặn (không thể di chuyển ở đây), R cho robot (điểm bắt đầu), hoặc G cho mục tiêu. Các thuật toán đã phải kiểm tra không gian di chuyển theo thứ tự lên, trái, phải, sau đó xuống, mà tôi tin rằng tôi đã làm một cách chính xác. Sau khi một nút được chọn, nó sẽ thay đổi nội dung của nó thành 'B'. Nếu không đạt được mục tiêu, 0 phải được trả lại.Tìm kiếm theo chiều rộng đầu tiên trên lưới 8x8 trong Java
Tôi đã thay đổi mã của mình để thực hiện những gì Kshitij nói với tôi và nó hoạt động rất đẹp. Tôi đã quá mệt mỏi khi thấy rằng tôi đã không khởi tạo hàng đợi của mình sau mỗi tập dữ liệu mới lol. Cảm ơn đã giúp đỡ!
public static int bfSearch(){
Queue <int []> queue = new LinkedList <int []>();
int [] start = {roboty,robotx,0};
queue.add(start);
while (queue.peek() != null){
int [] array = queue.remove();
if(array[0]-1 >= 0 && grid[array[0]-1][array[1]] != 'B'){
if (grid[array[0]-1][array[1]] == 'G'){
return array[2]+1;
}
else{
grid[array[0]-1][array[1]] = 'B';
int [] temp = {array[0]-1, array[1], array[2]+1};
queue.add(temp);
}
}
if(array[1]-1 >= 0 && grid[array[0]][array[1]-1] != 'B'){
if (grid[array[0]][array[1]-1] == 'G'){
return array[2]+1;
}
else{
grid[array[0]][array[1]-1] = 'B';
int [] temp = {array[0], array[1]-1, array[2]+1};
queue.add(temp);
}
}
if(array[1]+1 <= 7 && grid[array[0]][array[1]+1] != 'B'){
if (grid[array[0]][array[1]+1] == 'G'){
return array[2]+1;
}
else{
grid[array[0]][array[1]+1] = 'B';
int [] temp = {array[0], array[1]+1, array[2]+1};
queue.add(temp);
}
}
if(array[0]+1 <= 7 && grid[array[0]+1][array[1]] != 'B'){
if (grid[array[0]+1][array[1]] == 'G'){
return array[2]+1;
}
else{
grid[array[0]+1][array[1]] = 'B';
int [] temp = {array[0]+1, array[1], array[2]+1};
queue.add(temp);
}
}
}
return 0;
}
Dường như vn, cảm ơn vì sự thấu hiểu. Tôi cho rằng việc in các đường dẫn khả thi sẽ hoạt động theo cùng một cách, bằng cách chỉ thêm hướng được di chuyển như một giá trị trong hàng đợi. Vì vậy, sau khi popping (1,0) hàng đợi sẽ trông như thế này: {(0,2), 2, R}. Về bản chất, điều này sẽ cho phép tôi in đường dẫn khi đạt được mục tiêu, đúng không? – Ethan
Tôi sẽ chỉnh sửa câu trả lời của mình để trả lời rằng –
@KshitijMehta điều gì sẽ xảy ra với phần tử xếp hàng {(0, 1), 1} khi không có childeren khả thi ... khi nào bạn bật nó HOẶC nó vẫn còn trong hàng đợi? –