已知一張地圖(以二維矩陣的形式表示)以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位的查克拉可以打敗乙個大蛇丸的手下。假設鳴人可以往上下左右四個方向移動,每移動乙個距離需要花費1個單位時間,打敗大蛇丸的手下不需要時間。如果鳴人查克拉消耗完了,則只可以走到沒有大蛇丸手下的位置,不可以再移動到有大蛇丸手下的位置。佐助在此期間不移動,大蛇丸的手下也不移動。請問,鳴人要追上佐助最少需要花費多少時間?
input
輸入的第一行包含三個整數:m,n,t。代表m行n列的地圖和鳴人初始的查克拉數量t。0 < m,n < 200,0 ≤ t < 10
後面是m行n列的地圖,其中@代表鳴人,+代表佐助。*代表通路,#代表大蛇丸的手下。
output
輸出包含乙個整數r,代表鳴人追上佐助最少需要花費的時間。如果鳴人無法追上佐助,則輸出-1。
sample input
樣例輸入1sample output4 4 1
#@##
**##
###+
****
樣例輸入2
4 4 2
#@##
**##
###+
****
樣例輸出16樣例輸出2
4
1 #include 2 #include 3 #include 4 #include 5using
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 描述佐助被大蛇丸誘騙走了,鳴人在多少時間內能追上他呢?已知一張地圖 以二維矩陣的形式表示 以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位的查...