簡體   English   中英

搜索二維數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM