Я пытаюсь подсчитать, сколько ходов потребуется, чтобы добраться до цели по кратчайшему пути. Это должно быть сделано с помощью поиска в ширину. Я поместил сетку 8x8 в массив 2d, который заполнен одним из четырех символов, E для пустого (может перемещаться в эти места ), B для заблокированного (не может двигаться здесь ), R для робот (начальная точка)или G для цели. Алгоритм должен был проверять перемещаемые пробелы в порядке вверх, влево, вправо, затем вниз, что, я считаю, я сделал правильно. После того, как узел проверен, он меняет свое содержимое на «B». Если цель не может быть достигнута, следует вернуть 0.
Я изменил свой код, чтобы реализовать то, что сказал мне Кшитий, и он прекрасно работает. Я просто слишком устал, чтобы видеть, что я не инициализировал свою очередь после каждого нового набора данных, лол. Спасибо за помощь!
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;
}