[英]Search 2d Array
因此,我正在編寫一個Java程序,該程序應該找到從入口"2"
到數字"3"
之一的最短路徑。 它只能在" "
位置上行走。 "1"
是牆壁。
11111121
131 1
1 1 1111
1 1 13 1
1 1 11 1
1 1 1
1 1
11111111
我的初始想法是在2d數組中找到入口。 可以這樣完成:
Point entrance = new Point(0,0);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++){
if(map[i][j] == 2){
entrance.x =i;
entrance.y =j;
}
}
我還可以找到兩個"3"
並將其保存為點。 但我不確定如何將輪次返回最接近的"3"
。 我當時正在考慮像操縱桿一樣,在其中保存您所走的方向,例如(上,下,左,右)。 然后返回從入口到最近的所有移動步驟的完整列表。3.有任何建議或想法可以實現這一目標嗎?
您所擁有的只是圖的非規范表示。 當且僅當兩個相鄰單元都空閑時,每個單元才是圖形中的頂點,並且兩個相鄰單元之間都有一條邊。
現在,您以這種方式查看問題,然后像您一樣查找入口,然后進行廣度優先搜索以找到出口。
您需要制作一個計數器,該計數器將在每次當前位置為“”(可步行)時增加
矩陣中的符號" "
= 0
:
Point entrance = new Point(0,0);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++){
if(map[i][j] == 2){
entrance.x =i;
entrance.y =j;
}
}
Point firstexit = new Point(0,0);
int steps = 0;
int i = entrance.x;
int j = entrance.y;
int lasti = 0;
int lastj = 0;
while(true){
if(map[i][j] == 3){
firstexit.x =i;
firstexit.y =j;
break ;
}
if(map[i][j] == 0){
steps++;
}
// TO-DO : check if position exists
if(map[i][j+1] == 0 && (lasti != i && lastj != j)){
lastj = j;
j++;
}else if(map[i][j-1] == 0 && (lasti != i && lastj != j)){
lastj = j;
j--;
}else if(map[i+1][j] == 0 && (lasti != i && lastj != j)){
lasti = i;
i++;
}else if(map[i-1][j] == 0 && (lasti != i && lastj != j)){
lasti = i;
i--;
}
}
我會嘗試創建一個帶有節點和邊的圖形。 節點是迷宮中的交匯點,邊緣是交匯點與入口或出口對象之間的路徑。 每個邊緣對象都有一個“權重”。 一旦從雙精度數組中計算出網絡,就可以使用一些簡單的算法來計算出最短路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.