POJ 4115 鳴人和佐助

2021-08-14 16:34:54 字數 2048 閱讀 8237

總時間限制: 1000ms 記憶體限制: 65536kb

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

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

輸入 輸入的第一行包含三個整數:m,n,t。代表m行n列的地圖和鳴人初始的查克拉數量t。0 < m,n < 200,0 ≤ t < 10

後面是m行n列的地圖,其中@代表鳴人,+代表佐助。*代表通路,#代表大蛇丸的手下。

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

樣例輸入

樣例輸出

樣例輸出1

6樣例輸出2

4很有意思的題目。

bfs,用狀態記錄下每一步的查克拉數量。

while

true:

try:

m, n, t = input().split()

m = int(m); n = int(n); t = int(t)

grid=

r, c = 0, 0

for i in range(m):

if'@'in grid[i]:

r, c = i, grid[i].index('@')

queue =

visited = [[[0

for i in range(20)] for j in range(n)] for k in range(m)]

directions = [[-1, 0], [1, 0], [0, 1], [0, -1]]

visited[r][c][t] = 1

found = false

while len(queue):

if found:

break

tmp = queue[0]

queue.pop(0)

if grid[tmp[0]][tmp[1]] == '+':

found = true

print(tmp[3])

break

for direction in directions:

new_r = tmp[0] + direction[0]

new_c = tmp[1] + direction[1]

if new_r >= 0

and new_r < m and new_c >= 0

and new_c < n:

if grid[new_r][new_c] == '*'

andnot visited[new_r][new_c][tmp[2]]:

visited[new_r][new_c][tmp[2]] = 1

elif grid[new_r][new_c] == '#'

and tmp[2] > 0

andnot visited[new_r][new_c][tmp[2] - 1]:

visited[new_r][new_c][tmp[2] - 1] = 1

elif grid[new_r][new_c] == '+':

found = true

print(tmp[3] + 1)

break

ifnot found:

print(-1)

except:

break

4115 鳴人和佐助

總時間限制 1000ms 記憶體限制 65536kb 描述佐助被大蛇丸誘騙走了,鳴人在多少時間內能追上他呢?已知一張地圖 以二維矩陣的形式表示 以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位的...

poj 4115 鳴人和佐助(bfs特殊判重)

總時間限制 1000ms 記憶體限制 65536kb 描述佐助被大蛇丸誘騙走了,鳴人在多少時間內能追上他呢?已知一張地圖 以二維矩陣的形式表示 以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位的...

鳴人和佐助

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