目的:找到到達目的地所需的最少移動量。Java 2D陣列從A點到障礙物的最短路徑
方案:在2D陣列8×8與元件如以下:
*......B
........
****.**.
.A....*.
........
....**..
........
....*...
其中
- 「A」 表示的起點。
- 「B」代表目的地點。
- 「*」代表障礙物。
- 「。」代表一個空單元。
目前我已經做了下面的代碼:
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
class main
{
public static void main(String args[]) throws FileNotFoundException,IOException
{
FileInputStream FS = new FileInputStream("path.in");
DataInputStream DS = new DataInputStream(FS);
BufferedReader buffer = new BufferedReader(new InputStreamReader(DS));
String strLine = buffer.readLine();
int testCase = Integer.parseInt(strLine);
int R,C;
for(int i = 0;i < testCase;i++)
{
strLine = buffer.readLine();
String input[] = strLine.split(" ");
R = Integer.parseInt(input[0]);
C = Integer.parseInt(input[1]);
char[][] array = new char[R][C];
int sCoordX = 0;
int sCoordY = 0;
int eCoordX = 0;
int eCoordY = 0;
for(int j = 0; j < R ; j++)
{
strLine = buffer.readLine();
for(int k = 0;k < C;k++)
{
array[j][k] = strLine.charAt(k);
if(array[j][k] == 'A')
{
sCoordX = j;
sCoordY = k;
}
if(array[j][k] == 'B')
{
eCoordX = j;
eCoordY = k;
}
}
}
boolean reached = false;
int counter = 0;
int posX = sCoordX;
int posY = sCoordY;
while(!reached)
{
if(array[posX][posY] == 'B')
{
reached = true;
System.out.println("You are in goal!");
System.out.println(array[posX][posY]);
System.out.println("Number of steps:"+counter);
}
if(!reached && posX > eCoordX)
{
posX--;
counter++;
}
else if(!reached && posX < eCoordX)
{
posX++;
counter++;
}
if(!reached && posY > eCoordY)
{
posY--;
counter++;
}
else if(!reached && posY < eCoordY)
{
posY++;
counter++;
}
}
}
}
}
它找到到達目的地所需的「最短」的步驟量的工作但它會考慮什麼/障礙,空細胞它可以移動到。
我目前無法想出一種方式來編碼,以便能夠識別下一次移動的正確決定。
我正在考慮使用數組列表和一些算法,但我嘗試讀取一些算法,如Dijkstra's algorithm,但它似乎很混亂,任何人都可以幫助我以非常簡單的方式理解它在java中的實現?
// - (對不起我的編程技能,我還是個初學者) -
Google for A * -Algorithm – MrSmith42