快速上手BFS入門例題

2021-10-06 03:47:16 字數 2044 閱讀 1195

總結蒜頭君要回家,但是他家的鑰匙在他的朋友花椰妹手裡,他要先從花椰妹手裡取得鑰匙才能回到家。花椰妹告訴他:「你家的鑰匙被我複製了很多個,分別放在不同的地方。」

蒜頭君希望能盡快回到家中,他需要首先取得任意一把鑰匙,請你幫他計算出回家所需要的最短路程。

蒜頭君生活的城市可以看做是乙個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...

矩陣快速冪模板 例題(快速入門)

本來早在乙個月前就應該把這給掌握的,硬是得等到卡題了,才想到來補知識 傳送門 矩陣快速冪基礎講解 單純的求某一矩陣的快速冪是沒有什麼意義的,主要是由於所求的遞推式的數比較大時,如果使用暴力遞推,必定會超時,這時矩陣快速冪的作用就完美體現了 根據個人碼風和編碼習慣,敲了乙份模板,如果覺得有用,大佬們不...