鳴人和佐助

2022-07-17 11:30:16 字數 1780 閱讀 8911

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

input

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

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

output

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

sample input

樣例輸入1

4 4 1

#@##

**##

###+

****

樣例輸入2

4 4 2

#@##

**##

###+

****

sample output
樣例輸出1

6樣例輸出2

4

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;

6const

int maxn = 205;7

char

mp[maxn][maxn];

8int dis[4][2] = ,,, };

9int cnt[maxn][maxn]; //

記錄每個點的查克拉數量;

10int m, n, t, flag = 0;11

12struct

node

13step[40000

];16

17int bfs(int x, int

y)18

;23 queueq;

24 q.push(step[0

]);25 cnt[x][y] =t;

26while( !q.empty() )27;

41q.push(step[num]);42}

43else

if ( mp[gx][gy] == '#'

)44;49

q.push(step[num]);50}

51}52else

if( mp[gx][gy] == '

+') //

出口;53

return ++nowtime;54}

55}56}

57 flag = 1

;58 cout << "-1"

<59return0;

60}6162

intmain()

6372

for( i=0; i<=m; i++)

73for( j=0; j<=n; j++)

74if( '

@' ==mp[i][j] )

78if( flag == 0

)79 cout << timen <80 flag = 0;81

}82return0;

83 }

003 鳴人和佐助

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

4115 鳴人和佐助

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

NOI OJ 6044 鳴人和佐助

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