這裡就是在普通bfs上增加了乙個——大蛇丸的手下『#』,打敗乙個手下需要乙個查克拉,但題目限制了查克拉的數量為t
這樣造成的影響就是乙個位置遍歷的次數可能不止一次,因為如果按照沒有手下『#』時的最短路徑來遍歷的話,所需要的查克拉數量可能不夠,就要找其他路徑。
然後就要考慮下一次到達同乙個點時的狀態是否入隊的問題。容易想到的是如果第二次到達乙個位置時的,時間比上一次的多and查克拉數量比上一次的少,這個狀態就不用入隊了。考慮到每次移動的時間相同並且打敗乙個手下不需要花費時間,所以後面到達相同的位置時,時間肯定是大於第一次到達這個位置的時間。所以只用考慮排除查克拉數量比上一次少的情況了
如下圖,按路徑ddrr到達+,是要比路徑rrdd到達+的狀態更優的
**:
//因為沒走一步的時間都一樣且打敗手下不需要花費時間,所以可以不用優先佇列對時間排序
//numk[i][j]維護點到達點(i,j)是查克拉的最大數目
//ps:開始想該不該用查克拉的時候就被題嚇到了aaaaaaaa
#include
#include
#include
#include
#include
//#define int long long
using namespace std;
const
int inf=
0x3f3f3f3f
;const
int manx=
210;
int mp[manx]
[manx]
,times[manx]
[manx]
,numk[manx]
[manx]
;int n,m,k,x1,yy1,x2,y2,flag,mmax;
char str[manx]
;int dx=
;int dy=
;struct node*/}
;int
check
(int x,
int y,
int k)
void
bfs(
) queuequ;
numk[x1]
[yy1]
=k; qu.
push
(node);
while
(!qu.
empty()
) qu.
push
(net);}
}}}void
init()
intmain()
}bfs()
;if(flag)
printf
("%d\n"
,mmax)
;else
printf
("-1\n");
return0;
}
鳴人和佐助 計蒜客 T1214(BFS搜尋)
鳴人和佐助 計蒜客 t1214 題意 已知一張地圖 以二維矩陣的形式表示 以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位的查克拉可以打敗乙個大蛇丸的手下。假設鳴人可以往上下左右四個方向移動,每...
計蒜客 鳴人和佐助 bfs
佐助被大蛇丸誘騙走了,鳴人在多少時間內能追上他呢?已知一張地圖 以二維矩陣的形式表示 以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位的查克拉可以打敗乙個大蛇丸的手下。假設鳴人可以往上下左右四個...
鳴人和佐助 計蒜客 1214 廣搜 三維陣列
題目鏈結 題目 佐助被大蛇丸誘騙走了,鳴人在多少時間內能追上他呢?已知一張地圖 以二維矩陣的形式表示 以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位的查克拉可以打敗乙個大蛇丸的手下。假設鳴人可...