總時間限制: 1000ms 記憶體限制: 65536kb
描述 佐助被大蛇丸誘騙走了,鳴人在多少時間內能追上他呢?
已知一張地圖(以二維矩陣的形式表示)以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位的查克拉可以打敗乙個大蛇丸的手下。假設鳴人可以往上下左右四個方向移動,每移動乙個距離需要花費1個單位時間,打敗大蛇丸的手下不需要時間。如果鳴人查克拉消耗完了,則只可以走到沒有大蛇丸手下的位置,不可以再移動到有大蛇丸手下的位置。佐助在此期間不移動,大蛇丸的手下也不移動。請問,鳴人要追上佐助最少需要花費多少時間?
輸入 輸入的第一行包含三個整數:m,n,t。代表m行n列的地圖和鳴人初始的查克拉數量t。0 < m,n < 200,0 ≤ t < 10
後面是m行n列的地圖,其中@代表鳴人,+代表佐助。*代表通路,#代表大蛇丸的手下。
輸出 輸出包含乙個整數r,代表鳴人追上佐助最少需要花費的時間。如果鳴人無法追上佐助,則輸出-1。
樣例輸入
樣例輸入1樣例輸出4 4 1
#@##
**##
###+
樣例輸入2
4 4 2#@#### ###+ **
樣例輸出16 樣例輸出2
4
#include
#include
using
namespace
std;
int m,n,t;
int starti, startj, endi, endj;
char maze[210][210];
int mintime;
int totaltime ;
int cost[210][210][10];
int dir[4][2] = ,,, };
bool visited[210][210];
void dfs(int i,int j,int life)
for (int k = 0;k < 4;k++ )
if(maze[row][col] == '*'||maze[row][col] == '+' && life >= 0)}}
}}int main()
if(maze[i][j] == '+')
}
memset(visited,0,sizeof(visited));//初始化,都沒有訪問過
totaltime = 0;
mintime = 1
<< 30;//乙個較大的數
for(int i = 0;i < m;++i)
for(int j = 0;j for (int k = 0;k < 10;++k)
cost[i][j][k] = 1
<< 30;//初始,置成較大的數
visited[starti][startj] = 1;//開始搜尋
dfs(starti,startj,t) ;
if (mintime < 1
<< 30)
else
return
0;}
這裡**可以進一步寫的簡練些。 NOI OJ 6044 鳴人和佐助
總時間限制 1000ms記憶體限制 65536kb 描述佐助被大蛇丸誘騙走了,鳴人在多少時間內能追上他呢?已知一張地圖 以二維矩陣的形式表示 以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位的查...
NOI OJ 6044 鳴人和佐助
總時間限制 1000ms 記憶體限制 65536kb 描述佐助被大蛇丸誘騙走了,鳴人在多少時間內能追上他呢?已知一張地圖 以二維矩陣的形式表示 以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位的...
鳴人和佐助(OJ 6044)
描述 佐助被大蛇丸誘騙走了,鳴人在多少時間內能追上他呢?已知一張地圖 以二維矩陣的形式表示 以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位的查克拉可以打敗乙個大蛇丸的手下。假設鳴人可以往上下左...