迷宮回溯問題分析

2021-10-01 22:28:51 字數 1787 閱讀 8150

1 問題引入

按照上面的地圖,我們用二維陣列模擬地圖,因為紅色的地方表示圍牆,所以在二維陣列裡,我們用1表示圍牆.

int map = new int[8][7];

//上下全部為1

for (int i = 0; i < 7 ; i++)

//左右全部為1

for (int i = 1; i < 7 ; i++)

map[3][1] = 1;

map[3][2] = 1;

system.out.println("地圖的情況");

for (int i = 0; i < 8; i++)

system.out.println();

}

以下定義小球找路的規則和說明(結合以下**)

1)map表示地圖

2)i,j表示從地圖的哪個位置開始出發(1,1)

3)如果小球能到map[6][5]位置,則說明通路找到

4)約定:當map[i][j]為0表示該點沒有走過,當1表示牆,2表示通路可以走,3表示該店已經走過,但是走不通

5)在走迷宮時,需要確定乙個策略(方法),下->右->上->左,如果該點走不通,再回溯

按照上面的規則和思路**實現

public static void main(string args) 

//左右全部為1

for (int i = 1; i < 7 ; i++)

map[3][1] = 1;

map[3][2] = 1;

system.out.println("地圖的情況");

for (int i = 0; i < 8; i++)

system.out.println();

}setway(map,1,1);

system.out.println("小球走過之後的情況");

for (int i = 0; i < 8; i++)

system.out.println();}}

public static boolean setway(int map,int i,int j)else else if(setway(map,i,j+1))else if(setway(map,i-1,j))else if(setway(map,i,j-1))else

}else}}

奉上程式執行結果

地圖的情況

1 1 1 1 1 1 1

1 0 0 0 0 0 1

1 0 0 0 0 0 1

1 1 1 0 0 0 1

1 0 0 0 0 0 1

1 0 0 0 0 0 1

1 0 0 0 0 0 1

1 1 1 1 1 1 1

小球走過之後的情況

1 1 1 1 1 1 1

1 2 0 0 0 0 1

1 2 2 2 0 0 1

1 1 1 2 0 0 1

1 0 0 2 0 0 1

1 0 0 2 0 0 1

1 0 0 2 2 2 1

1 1 1 1 1 1 1

思考:如何求出走出迷宮的最短路徑?

思路分析:修改走迷宮時的策略,不同的策略定義計數器即可,在這裡我就不做**實現了.

迷宮回溯問題

概念介紹 請看圖,上圖為乙個迷宮,1為阻擋區間,也就是說不能走。0為可踏足地帶,我們的目標是從a點出發,走到b點,則任務完成!為了方便大家理解,我們只在 3,1 以及 3,2 這兩個位置設定阻擋位。實現 先明確實現思路 假設我們在a 1,1 位置,我們能做的操作是嘗試向下 向右 向上或者向左走一步。...

回溯法 迷宮問題

1.首先我們需要自定義乙個迷宮 左上角為入口,右下角為出口,0為路,1為牆 用二維陣列儲存 2.我們在走迷宮之前,首先要確立乙個走的順序,即貪心準則,我們首先試探的方向應該是下,然後是右,上,左 為了確保每乙個格仔都有上下左右,我們需要給我們的迷宮加上一圈牆8 8,變成10 10 3.當我們在乙個格...

迷宮問題 回溯法

描述 給乙個20 20的迷宮 起點座標和終點座標,問從起點是否能到達終點。輸入 多個測例。輸入的第一行是乙個整數n,表示測例的個數。接下來是n個測例,每個測例佔21行,第一行四個整數x1,y1,x2,y2是起止點的位置 座標從零開始 x1,y1 是起點,x2,y2 是終點。下面20行每行20個字元,...