佐助被大蛇丸誘騙走了,鳴人在多少時間內能追上他呢?
已知一張地圖(以二維矩陣的形式表示)以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位的查克拉可以打敗乙個大蛇丸的手下。假設鳴人可以往上下左右四個方向移動,每移動乙個距離需要花費 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個單位時間,打敗...