Поиск в ширину-первый поиск в сетке 8x8 в Java

Я пытаюсь подсчитать, сколько ходов потребуется, чтобы добраться до цели по кратчайшему пути. Это должно быть сделано с помощью поиска в ширину. Я поместил сетку 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;
}
10
задан false 15 September 2014 в 16:00
поделиться