poj3669解題報告(詳細)

2021-07-02 15:01:47 字數 1379 閱讀 1347

卡在2星期前,今天終於搞掂了。

先說下題目大意吧。

流星雨來襲擊我們的女主牛了,bessie。為了找乙個安全地方,她開始逃了。地圖相當於平面座標系第一象限,bessie一開始在原點。然後,每顆流星都會在某個時刻砸下來,砸到的地方連同上下左右都會被毀滅,此時這些地方bessie就不能通過了,她只能走其它地方。bessie的移動速度是每時刻移動一步,上下左右,不能對角線移動。現在求bessie最小的移動步數。

看到最小的,就立馬反應,bfs。可是,這個地圖不好弄,每個時刻都會更新,如果我們每個時刻跟新一下地圖,bfs一下。這樣就很麻煩了,有沒有其它方法?

一開始就把地圖弄好,被流星砸到的位置用砸到的時間表示。

map[i][j] = min;
這就有乙個問題了,給出的資料不是按順序給出的。先來看一下題目,被砸到的地方不能通過,如果map[i][j]儲存的是晚砸到的時間,我們使用bfs得出的答案就會出錯,因為這個位置早就不能通過的。所以要保證這個被砸到的map[i][j]是最小的時間。

其實,處理起來也很簡單。一開始把地圖初始化為-1.

for(int i = 0;i=0&&nx<=300&&ny>=0&&ny<=300&&(t這裡博主沒有用陣列,而是輸入乙個處理乙個。如果輸入的t>map[i][j],我們就跟新map[i][j]。

地圖弄好了,其它都好辦了。

接下來,考慮怎麼儲存bessie的狀態。

弄成乙個struct,或者class

typedef structstate;

剩下沒什麼好說的,常規bfs。

在判斷下一步可不可以移動時,我們要注意,如果bessie移動到這個位置,時間剛好等於map[i][j],那bessie就會被砸死。

要提前看

state s;

s.t > map[i][j]//大於就可以移動

測試資料,用txt儲存。比如儲存為1.txt

然後freopen(「1.txt」,」r」,stdin)改變我們的標準輸入流,這樣就不用乙個乙個輸了,答案是13

23 2 5 10

1 3 5

5 3 12

3 3 9

1 8 7

8 4 15

2 3 7

0 0 2

6 7 10

4 4 10

3 7 7

8 5 13

0 4 9

2 6 8

0 2 4

6 4 12

0 6 7

4 2 10

1 4 7

4 6 10

5 5 12

6 5 14

2 1 2

POJ 3669題目解答

poj 3669題目解答 bessie被流星雨襲擊,給出m顆流星,每個流星都有墜落的橫縱座標,以及墜落的時間。每個流星墜落後,該格仔連同上 下 左 右四個格仔都不能走了。bessie從 0,0 出發,每次只能向上 下 左 右移動一格,求達到安全位置的最小移動次數,不能則輸出 1。思路 地圖的大小沒有...

POJ 3669廣度優先搜尋

這是一道典型的廣度優先搜尋bfs題目。首先宣告一下,我在這裡借鑑了別人的想法 這是原文答案,題目大意 流星雨即將攻擊地球,當然數目是有限的,共n個,攻擊到某個點時將會使該點及其上下左右四個點都被摧毀。乙個女的,不想被擊中啊,就跑啊。她要在地球上找到乙個地方讓她能夠度過災難。把整個地圖看作一張二維表,...

poj3669 流星雨啊

poj3669這道題我看了好像兩三天的樣子 迷之tle,迷之mle,迷之wa 後來發現,問題有點兒多.一共三個問題,一是讀入流星的時候,沒有考慮前面流星對後面流星的影響.二是 小主人公可以跑到300 300的格仔外面.三是 走路的時候,忘了判斷路是否已經走過 include include incl...