總結蒜頭君要回家,但是他家的鑰匙在他的朋友花椰妹手裡,他要先從花椰妹手裡取得鑰匙才能回到家。花椰妹告訴他:「你家的鑰匙被我複製了很多個,分別放在不同的地方。」
蒜頭君希望能盡快回到家中,他需要首先取得任意一把鑰匙,請你幫他計算出回家所需要的最短路程。
蒜頭君生活的城市可以看做是乙個n×m的網格,其中有道路有障礙,鑰匙和家所在的地方可以看做是道路,可以通過。蒜頭君可以在城市中沿著上下左右 44 個方向移動,移動乙個格仔算做走一步。
輸入格式
第一行有兩個整數 nn,mm。城市的地圖是 nn行 mm 列。(1≤n,m≤2000)
接下來的 nn 行,每行 mm 個字元,代表城市的地圖。』.』 代表道路,』#』 代表障礙物,『s』 代表蒜頭君所在的位置,『t』 代表蒜頭家的位置,'p』代表鑰匙的位置。除了障礙物以外,別的地方都可以通過。(題目保證蒜頭君至少有一條路徑可以順利拿到鑰匙並且回家)
輸出格式
輸出蒜頭回家要走的最少步數,佔一行。
樣例輸入
8 10
p.####.#p#
…#…#…#
…#t##.#.#
……##.#####
…#####…##
###…s##
樣例輸出
21思路
先廣搜至找到鑰匙,設定flag進行狀態標記。然後再次廣搜。
#include
#include
#include
using
namespace std;
const
int inf =
11111111
;typedef pair<
int,
int> point;
int res = inf +
1, n, m, book[
100]
[100][
2], dis[
100]
[100];
char map[
100]
[100];
int sx, sy;
int dx[4]
, dy[4]
;int flag =0;
void
bfs(
int x,
int y)
if(map[tmp.first]
[tmp.second]
=='p'
)for
(int i =
0; i <
4; i++)}
}}intmain()
}}fill
(dis[0]
, dis[0]
+100
*100
, inf)
; dis[sx]
[sy]=0
;bfs
(sx, sy)
; cout << res;
return0;
}
#include
#include
using
namespace std;
int step =0;
int n, m, sx, sy, ex, ey;
char map[50]
[50];
int book[50]
[50];
int dist[50]
[50];
int dx[4]
=, dy[4]
=;typedef pair<
int,
int> point;
intbfs
(int x,
int y)}}
return-1
;}intmain()
if(map[i]
[j]==
't')}}
cout <<
bfs(sx, sy)
;return0;
}
需要的一般有map,book,dx,dy,dis(用來記錄距離),queue(容器)。 github入門操作快速上手
官方資料 github幫助 該套路同樣適用於桌面版,即轉殖並初始化 改動並commit pull push 如題網頁點開需要操作的repository,複製鏈結比如 然後 clone到本地 git clone一般會自動初始化,終端cd到repo比如這裡的blogs資料夾,blogs會在終端顯示為bl...
Hibernate簡單入門,快速上手
1,建立乙個springboot專案 2,配置properties檔案 spring.datasource.url jdbc mysql 124.70 190 246 3306 spring?servertimezone utc spring.datasource.username root spr...
矩陣快速冪模板 例題(快速入門)
本來早在乙個月前就應該把這給掌握的,硬是得等到卡題了,才想到來補知識 傳送門 矩陣快速冪基礎講解 單純的求某一矩陣的快速冪是沒有什麼意義的,主要是由於所求的遞推式的數比較大時,如果使用暴力遞推,必定會超時,這時矩陣快速冪的作用就完美體現了 根據個人碼風和編碼習慣,敲了乙份模板,如果覺得有用,大佬們不...