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個字元,...