私がやろうとしているのは、最短経路を使用してゴールに到達するまでに何回移動する必要があるかを数えることです。これは、幅優先検索を使用して行う必要があります。8x8 グリッドを 2 次元配列に入れ、4 つの文字のいずれかで満たされます。E は空 (これらのスポットに移動できます)、B はブロック (ここでは移動できません)、R はロボット (開始点)、または G です。ゴールのために。アルゴリズムは、可動スペースを上、左、右、下の順にチェックする必要がありましたが、これは正しく行ったと思います。ノードがチェックされると、その内容が「B」に変わります。目標に到達できない場合は、0 を返す必要があります。
Kshitij が私に言ったことを実装するためにコードを変更しました。新しいデータ セットが作成されるたびに、キューを初期化していないことに気がつきませんでした (笑)。助けてくれてありがとう!
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;
}