牛客 地下迷宮

2021-07-25 17:36:59 字數 1650 閱讀 3910

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

輸入描述:

輸入包括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]

bfs最短路徑,並且記錄路徑。

my code:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include //std::pair

using

namespace

std;

typedef

long

long ll;

int n,m,p,ma[12][12],vis[12][12];

int dis[4][2]=;

struct pos

};stack

ans;

bool check(int a, int b)

int bfs(int si,int sj)

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

return -1;

}int main()

else

if(ans.top().x-si==1)

si=ans.top().x;

sj=ans.top().y;

flag--;

ans.push(ans.top());

}ans.pop();

}//所需體力小於所給體力就能走到終點

if(sum<=p)

cout

cout

<<"can not escape!"

cout

<<"can not escape!"

0;}

ZJUT 地下迷宮 (高斯求期望)

設dp i 表示在i點時到達終點要走的期望步數,那麼dp i 1 m dp j 1,j是與i相連的點,m是與i相鄰的點數,建立方程組求解。重要的一點是先判斷dk到達不了的點,需要bfs預處理一下進行離散化,再建立方程組。include include include include include ...

PTA 7 5 地下迷宮探索 30分

地道戰是在抗日戰爭時期,在華北平原上抗日軍民利用地道打擊日本侵略者的作戰方式。地道網是房連房 街連街 村連村的地下工事,如下圖所示。我們在回顧前輩們艱苦卓絕的戰爭生活的同時,真心欽佩他們的聰明才智。在現在和平發展的年代,對多數人來說,探索地下通道或許只是一種娛樂或者益智的遊戲。本實驗案例以探索地下通...

牛客網上,華為迷宮問題

定義乙個二維陣列n m 其中2 n 10 2 m 10 如5 5陣列下所示 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。入口點為 0,0 既第一空格是可以走的路。input 乙個n m的二...