總時間限制:
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
剛開始,沒有意識到visit應該是三維的。
1 #include 2using
namespace
std;
3struct
node
6node() {}7};
8int dr[4]= ;
9int dc[4]= ;
10int
m,n,t;
11char a[205][205
];12
int visit[205][205][16
];13
node start,goal;
14 queue q;
15int
main()
24if(a[i][j]=='+'
) 28
for(int t=0; t<=t; t++) 31}
32}33while(!q.empty())q.pop();
34 visit[start.r][start.c][t]=1;35
q.push(start);
36while(!q.empty()) else
50if(!visit[rr][cc][p.k]&&a[rr][cc]=='*'
) 54}55
}5657}
58if(q.empty())cout<
<
5960
return0;
61 }
POJ 4115 鳴人和佐助
總時間限制 1000ms 記憶體限制 65536kb 描述 佐助被大蛇丸誘騙走了,鳴人在多少時間內能追上他呢?已知一張地圖 以二維矩陣的形式表示 以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位...
鳴人和佐助
已知一張地圖 以二維矩陣的形式表示 以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位的查克拉可以打敗乙個大蛇丸的手下。假設鳴人可以往上下左右四個方向移動,每移動乙個距離需要花費1個單位時間,打敗...
百練4115 鳴人和佐助(變式BFS)
總時間限制 1000ms 記憶體限制 65536kb 描述 佐助被大蛇丸誘騙走了,鳴人在多少時間內能追上他呢?已知一張地圖 以二維矩陣的形式表示 以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位...