這是一道典型的廣度優先搜尋bfs題目。
首先宣告一下,我在這裡借鑑了別人的想法:這是原文答案,
題目大意:
流星雨即將攻擊地球,當然數目是有限的,共n個,攻擊到某個點時將會使該點及其上下左右四個點都被摧毀。乙個女的,不想被擊中啊,就跑啊。她要在地球上找到乙個地方讓她能夠度過災難。把整個地圖看作一張二維表,設該女孩在原點。其中輸入第一行為流星個數n。接下來n行,每行3個值,x,y,t。代表著(x,y)這一點將在t時間後接受流星的寵幸。。輸出為這個女的逃命的最短時間。如果注定將與流星為伴,那就輸出-1.。
我的理解:
地球看作是乙個二維表,每個點(x,y)上的值可以看作流星最早到來的時間。如果這人在流星到來之前就已走過則從此處逃命成功。直到其逃出流星雨寵幸的範圍,則逃命成功!
**:
#include #include #include #include #include #define max_n 512
using namespace std;
int map[max_n][max_n]; //用於儲存每個點最早被炸毀的時間
bool visited[max_n][max_n]; //深度優先搜尋時判定該點是否被訪問過
struct m; //定義乙個結構:代表著這點的座標位置以及流星最早落下的時間
//要移動的方向:上 下 左 右 自身
const int direction[5][2] = ,
, ,, ,
};m m[50008];
int n; //n個流星
int last; //最晚一顆流星落下的時間
int bfs()
//如果還沒有到達安全區,則只是證明這點目前是安全的,加入到佇列中去,看看該點周圍是否有永久安全區。。
que.push(current);
} } }
return -1;
}int main()
//將地圖中每個點流星最晚落下的時間設為127(隨便啦,滿足題意就行)。。
memset(map,0x7f,sizeof(map));
for(int i = 0;i= 0 && ny >= 0 && map[nx][ny] > m[i].t)
} }if(map[0][0] == 0){ //如果還沒開始逃命就被寵幸了,那就享受吧。。。
cout<<"-1"<
POJ 3669題目解答
poj 3669題目解答 bessie被流星雨襲擊,給出m顆流星,每個流星都有墜落的橫縱座標,以及墜落的時間。每個流星墜落後,該格仔連同上 下 左 右四個格仔都不能走了。bessie從 0,0 出發,每次只能向上 下 左 右移動一格,求達到安全位置的最小移動次數,不能則輸出 1。思路 地圖的大小沒有...
poj3669解題報告(詳細)
卡在2星期前,今天終於搞掂了。先說下題目大意吧。流星雨來襲擊我們的女主牛了,bessie。為了找乙個安全地方,她開始逃了。地圖相當於平面座標系第一象限,bessie一開始在原點。然後,每顆流星都會在某個時刻砸下來,砸到的地方連同上下左右都會被毀滅,此時這些地方bessie就不能通過了,她只能走其它地...
poj3669 流星雨啊
poj3669這道題我看了好像兩三天的樣子 迷之tle,迷之mle,迷之wa 後來發現,問題有點兒多.一共三個問題,一是讀入流星的時候,沒有考慮前面流星對後面流星的影響.二是 小主人公可以跑到300 300的格仔外面.三是 走路的時候,忘了判斷路是否已經走過 include include incl...