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