小青蛙有一天不小心落入了乙個地下迷宮,小青蛙希望用自己僅剩的體力值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的二...