青蛙走迷宮

2022-08-29 19:57:14 字數 1558 閱讀 8697

【**】網傳的2017滴滴秋招筆試題

【問題描述】

小青蛙有一天不小心落入了乙個地下迷宮,小青蛙希望用自己僅剩的體力值p跳出這個地下迷宮。n*m的格仔迷宮每個位置為0或者1,1代表可達,0不可達。小青蛙初始在(0,0),地下迷宮的出口在(0,m-1)(保證這兩個位置都是1,並且保證一定有起點到終點可達的路徑)。小青蛙在迷宮中水平移動乙個單位距離需耗1個體力值,向上爬乙個單位需耗3個體力值,向下移動不消耗體力值。當小青蛙的體力值等於0的時候還沒有到達出口,小青蛙將無法逃離迷宮。

輸入描述: 

輸入包括n+1行: 

第一行為三個整數n,m(3 <= m,n <= 10),p(1 <= p <= 100) 

接下來的n行: 每行m個0或者1,以空格分隔 

輸出描述: 

如果能逃離迷宮,則輸出一行體力消耗最小的路徑,輸出格式見樣例所示;如果不能逃離迷宮,則輸出」can not escape!」。 

測試資料保證答案唯一 

【測試樣例】

輸入 4 4 10 

1 0 0 1 

1 1 0 1 

0 1 1 1 

0 0 1 1 

輸出 [0,0],[1,0],[1,1],[2,1],[2,2],[2,3],[1,3],[0,3]

【演算法思想】

遞迴法解,在寫程式時重點要理清程式步驟的思路。

【程式】

1 #include2 #include3 #include

4using

namespace

std;56

int step_x[4] = ;

7int step_y[4] = ;

8int price[4] = ;

9 vectorxmax;

10 vectorymax;

1112

void frog(int maze[11][11],int flag[11][11],int x,int y,int p,int n,int m,vector xpath,vector ypath,int &max_leftp)

1318

19if ( x==0 && y==m-1 )

25return;26

}2728for (int i = 0; i < 4;i++)40}

41}4243

intmain()57}

5859

//起點

60 flag[0][0] = 1

;61 xpath.push_back(0

);62 ypath.push_back(0

);63

64int max_leftp = -100

;65 frog(maze,flag,0,0

,p,n,m,xpath,ypath,max_leftp);

6667

if (max_leftp == -100)70

71for (int i = 0; i < xmax.size(); i++)

76 cout <7778

return0;

79 }

走迷宮演算法

從起點問題的提出 在遊戲地圖中,如何尋找一條從起點到終點的最短行路線路?資料表達 使用m n大小的byte陣列 來表示地圖,每個位置的狀態用0表示可走,1表示牆,2表示起點,3表示終點,128表示路徑 行走規則有兩種 4方向行走規則 只能從當前點向上,下,左,右 這4個方向行走 8方向行走規則 可以...

老鼠走迷宮

說明 老鼠走迷宮是遞迴求解的基本題型,我們在二維陣列中使用2表示迷宮牆壁,使用1來表示老鼠的行走路徑,試以程式求出由入口至出口的路徑。解法 老鼠的走法有上 左 下 右四個方向,在每前進一格之後就選乙個方向前進,無法前進時退回選擇下乙個可前進方向,如此在陣列中依序測試四個方向,直到走到出口為止,這是遞...

走迷宮問題

1.這個是迷宮,1代表牆,0代表通路。1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 0 0 0...