bfs jzoj1235 洪水 紀中集訓提高B組

2021-09-26 02:00:17 字數 2033 閱讀 2590

ime limits: 1000 ms memory limits: 65536 kb detailed limits

一天, 乙個畫家在森林裡寫生,突然爆發了山洪,他需要盡快返回住所中,那裡是安

全的。森林的地圖由r行c列組成,空白區域用點「.」表示,洪水的區域用「*」表示,而

岩石用「x」表示,另畫家的住所用「d」表示,畫家用「s」表示。

有以下幾點需要說明:

1、 每一分鐘畫家能向四個方向移動一格(上、下、左、右)

2、 每一分鐘洪水能蔓延到四個方向的相鄰格仔(空白區域)

3、 洪水和畫家都不能通過岩石區域

4、 畫家不能通過洪水區域(同時也不行,即畫家不能移到某個格仔,該格仔在畫家達到的同時被洪水蔓延到了,這也是不允許的)

5、 洪水蔓不到畫家的住所。

給你森林的地圖,編寫程式輸出最少需要花費多長時間才能從開始的位置趕回家中。

輸入第一行包含兩個整數r和c(r,c<=50)。

接下來r行每行包含c個字元(「.」、「*」、「x」、「d」或「s」)。地圖保證只有乙個「d」和乙個「s」。

輸出畫家最快安全到達住所所需的時間,如果畫家不可能安全回家則輸出「kaktus」。

輸入1:

3 3d.*

….s.

輸入2:

3 3d.*……s

輸入3:

3 6d…*.

.x.x…

…s.輸出1:

3輸出2:

kaktus

輸出3:

6感覺在bz考過原題其實。

暴力bfs即可。

雖然知道這是一道大水題但是我a了它還是很開心。

聽評講發現洪水的蔓延可以逆向思維,一次bfs算出每個點被洪水浸沒的時間即可。

但是我是直接記錄了一下當前時間,如果到了下一秒(就是bfs樹的下一層),就暴力更新洪水的蔓延狀況,因為n比較小所以我還是過了。

就是』d』那個特殊符號要特判一下,打碼的時候忘了,結果還調了好久2333。

#include

#include

#include

#include

using

namespace std;

#define n 55

#define m 2005

const

int dx=

,dy=

;char mp[n]

[n];

bool vis[n]

[n];

int r,c,sx,sy,tx,ty;

struct node

;queueq;

bool

check

(int nx,

int ny)

void

sch(

)int

main()

}while

(!q.

empty()

) q.

pop();

node tmp;tmp.x=sx,tmp.y=sy,tmp.tim=0;

q.push

(tmp)

;int last_time=0;

while

(!q.

empty()

)//printf("%d %d %d\n",now.x,now.y,now.tim);

//for(int i=1;i<=r;i++)

// puts(mp[i]+1);

if(mp[now.x]

[now.y]

=='*'

)continue

;for

(int k=

0;k<

4;k++

)//printf("%d %d %d\n",nxt.x,nxt.y,nxt.tim);

vis[nxt.x]

[nxt.y]=1

; q.

push

(nxt);}

}puts

("kaktus");

return0;

}

程式設計成長123

有很多朋友問我該怎麼學程式設計,要是說如何成為一名優秀的程式設計師,我覺得我還沒有能力說三道四,但要說如何成為一名合格的win32程式設計師,我個人倒是有一些些的見第 學習程式設計,成為一名合格的程式設計師是一條漫長而又艱辛的道路,當然,你的付出也會得到回報,首當其衝的就是那份成功時的快感,它非常重...

資料探勘123

資料處理相關工作的經驗總結。1,資料分析的目的 提出方案,解決問題。所以,面對海量資料,先不要著急去分析。大致了解資料構成,內容,欄位就可以了。否則,在資料沙漠裡行走,不累死,也拖拉致死。2,確定目標後,再篩選資料。選擇你需要的資料,過濾掉無效資料 包括去除非必要字段,清洗髒資料,如去重,去空 如果...

敏捷開發123

在各大論壇都能看到,很多人到處在問要實現敏捷,該怎麼做。非常理解這些同學的心情,也許他們也嘗試過各種方法,但是發現還是不能敏捷,所以他們就到處求醫問藥,結果還是不好使。為什麼會這樣了,主要是沒有對症下藥,沒有根據自己公司的實際情況出發,去找解決辦法。感覺我有什麼,你就要什麼,而不是你需要什麼。所以總...