總時間限制:
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
分析:這題非常險惡=-=。首先直接想到用bfs求最短時間。
常規思路都是bfs加乙個vis陣列判重,但這題不一樣的是它有查克拉這個屬性需要記錄。
就是說你根據不同的走法,是可以多次走同乙個點的,即乙個點並不是只能走一次。為什麼呢?因為走不同的路線,你查克拉的剩餘量可能是不一樣的。你上次走這的時候如果查克拉剩餘是n,但是你可能走另一條路再到這的時候是大於n的。這時候你到底要不要再把這個點放進去呢,答案是,如果上次的小於這次的剩餘查克拉,則可以走,因為啊,你上次走著的時候儲存的資訊在佇列的前面,你如果上次是能走到佐助那的話,程式會在執行到後一次走這之前就結束了,如果沒結束說明上次走這的時候,剩餘的查克拉不夠走到佐助,所以後一次的查克拉如果大於前一次走到這的則可以放入佇列。所以這題和普通的無條件走迷宮問題
是不一樣的。
#include#include#include#include#include#include#include#include#include#includeusing namespace std;
char a[200][200];
int ckl[200][200]; //存放a[i][j]點的查克拉剩餘量
struct inf;
int main()
}queueq;
q.push(inf);
ckl[si][sj]=k;//標記起點查克拉量
memset(ckl,-1,sizeof(ckl));
while(!q.empty()));
ckl[t.x-1][t.y]=t.k;
}else if(a[t.x-1][t.y]=='+'||t.k>0));
}
} if(t.y>0&&t.k>ckl[t.x][t.y-1]));
ckl[t.x][t.y-1]=t.k;
}else if(a[t.x][t.y-1]=='+'||t.k>0));
ckl[t.x][t.y-1]=t.k;
}} if(t.xckl[t.x+1][t.y]));
}else if(a[t.x+1][t.y]=='+'||t.k>0));
ckl[t.x+1][t.y]=t.k;
}} if(t.yckl[t.x][t.y+1]));
ckl[t.x][t.y+1]=t.k;
}else if(a[t.x][t.y+1]=='+'||t.k>0));
ckl[t.x][t.y+1]=t.k;
}} }
cout<<"-1"<
POJ 4115 鳴人和佐助
總時間限制 1000ms 記憶體限制 65536kb 描述 佐助被大蛇丸誘騙走了,鳴人在多少時間內能追上他呢?已知一張地圖 以二維矩陣的形式表示 以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位...
4115 鳴人和佐助
總時間限制 1000ms 記憶體限制 65536kb 描述佐助被大蛇丸誘騙走了,鳴人在多少時間內能追上他呢?已知一張地圖 以二維矩陣的形式表示 以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位的...
百練4115 鳴人和佐助(變式BFS)
總時間限制 1000ms 記憶體限制 65536kb 描述 佐助被大蛇丸誘騙走了,鳴人在多少時間內能追上他呢?已知一張地圖 以二維矩陣的形式表示 以及佐助和鳴人的位置。地圖上的每個位置都可以走到,只不過有些位置上有大蛇丸的手下,需要先打敗大蛇丸的手下才能到這些位置。鳴人有一定數量的查克拉,每乙個單位...