計蒜客 鳴人和佐助 bfs

2021-10-02 23:33:09 字數 1579 閱讀 7131

佐助被大蛇丸誘騙走了,鳴人在多少時間內能追上他呢?

已知一張地圖(以二維矩陣的形式表示)以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位的查克拉可以打敗乙個大蛇丸的手下。假設鳴人可以往上下左右四個方向移動,每移動乙個距離需要花費 11 個單位時間,打敗大蛇丸的手下不需要時間。如果鳴人查克拉消耗完了,則只可以走到沒有大蛇丸手下的位置,不可以再移動到有大蛇丸手下的位置。佐助在此期間不移動,大蛇丸的手下也不移動。請問,鳴人要追上佐助最少需要花費多少時間?

輸入格式

輸入的第一行包含三個整數:mm,nn,tt。代表 mm 行 nn 列的地圖和鳴人初始的查克拉數量 tt。0 < m,n < 2000後面是 mm 行 nn 列的地圖,其中 @ 代表鳴人,+ 代表佐助。* 代表通路,# 代表大蛇丸的手下。

輸出格式

輸出包含乙個整數 rr,代表鳴人追上佐助最少需要花費的時間。如果鳴人無法追上佐助,則輸出 -1−1。

輸出時每行末尾的多餘空格,不影響答案正確性

樣例輸入1複製

4 4 1

#@##

**##

###+

樣例輸出1複製

6樣例輸入2複製

4 4 2

#@##

**##

###+

樣例輸出2複製

4會出現乙個點不同體力時走,所以要標記一下

6 6 1

#***#

###@#

#**###

##+###

這個樣例能測試

#include

#define pb push_back

#define mem(a,b) memset(a,b,sizeof a)

using

namespace std;

typedef

long

long ll;

const

int inf=

0x3f3f3f3f

;char mm[

205]

[205];

int vis[

205]

[205];

//判斷體力

int m,n,t,wx[4]

=,wy[4]

=;struct ptpt(

int x_,

int y_,

int t_,

int tot_):x

(x_),y

(y_),t

(t_)

,tot

(tot_)

}pt;

intmain()

}}int f=-1

;while

(!q.

empty()

) tot++;if

(mm[a]

[b]==

'+')

q.push(pt

(a,b,qt,tot));

}}if(f!=-1

)break;}

cout

}

鳴人和佐助 計蒜客 T1214(BFS搜尋)

鳴人和佐助 計蒜客 t1214 題意 已知一張地圖 以二維矩陣的形式表示 以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位的查克拉可以打敗乙個大蛇丸的手下。假設鳴人可以往上下左右四個方向移動,每...

計蒜客 T1214 鳴人和佐助 bfs 佇列

這裡就是在普通bfs上增加了乙個 大蛇丸的手下 打敗乙個手下需要乙個查克拉,但題目限制了查克拉的數量為t 這樣造成的影響就是乙個位置遍歷的次數可能不止一次,因為如果按照沒有手下 時的最短路徑來遍歷的話,所需要的查克拉數量可能不夠,就要找其他路徑。然後就要考慮下一次到達同乙個點時的狀態是否入隊的問題。...

鳴人和佐助

已知一張地圖 以二維矩陣的形式表示 以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位的查克拉可以打敗乙個大蛇丸的手下。假設鳴人可以往上下左右四個方向移動,每移動乙個距離需要花費1個單位時間,打敗...