【**】網傳的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 #include4using
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...