bfs 很巧妙的乙個記錄路徑方式!!

2021-07-15 20:06:38 字數 1384 閱讀 7202

總時間限制:

1000ms

記憶體限制:

65536kb

描述 佐助被大蛇丸誘騙走了,鳴人在多少時間內能追上他呢?

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

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

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

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

樣例輸入

樣例輸入14 4 1#@##**#####+****樣例輸入24 4 2#@##**#####+****
樣例輸出

樣例輸出16樣例輸出24
朋友給我的一道題,自認為很水,可惜有很多情況沒考慮到,這種型別還是很好的!!!

#include #include#include#includeusing namespace std;

int m,n,t;

char str[210][210];

int cost[210][210];//不可以用vis標記路徑是否走過!必須看當前能量是否大於下一步的能量!!

int dic[2]=,,,};

struct node1

node[100010];

queueq;

void bfs(int x,int y)

if(xx=0&&yy=0&&cost[q2.x][q2.y]>cost[xx][yy])

if(str[xx][yy]=='*')}}

if(flag)

}if(flag)

else

printf("-1\n");

while(!q.empty())

q.pop();

}int main()

{ scanf("%d%d%d",&n,&m,&t);

memset(cost,-1,sizeof(cost));

for(int i=0;i

記錄乙個很奇怪的bug,待解決

乙個很簡單的矩陣求冪模板類的程式,但是在vector temp n,vector n 這一句不能執行,會卡死。下面是完整的 和輸出 方陣的冪運算,n n 矩陣的m次冪 1 使用類進行封裝 2 使用c 操作符過載 可選 3 使用模板 可選 你必須定義乙個 main 函式入口。include inclu...

BFS的乙個題

關於 bfs要點 1 若為可化為的座標系圖形,可用結構體儲存其x值,y值和步數。一般開now 和 next now用於取出佇列裡面的結構體 next用於上下左右的運動計算,並且push到佇列中。2 在運用佇列時,常用的函式 push,front,size,empty,pop 等等 特別是在front...

乙個很奇怪的問題

if equipmentlist.size 0 string equipidarray new string 3 for int i 0 i equipmentlist.size i element equipment element equipmentlist.get i string equip...