我是個對電腦科學有興趣的學生,我會貼上我的學習歷程及生活心情,也請大大們多多指教。 :)

2014年4月18日 星期五

[World Final 2005][Uva Live Archive] 3274 - Crossing Streets

題目網址: http://goo.gl/S1GSv3

題意: 你想從家裡出發至學校,題目給定N條馬路,馬路的兩端點皆為整數點,且馬路只會是水平或鉛直,但是你可以任意的走(不必在整數點上),但是不能橫向穿越兩條馬路交點(誰敢直接對角過馬路阿XDDDD),因為你怕危險,從家裡走至學校的路途中想經過盡量少的馬路,問最少需要多少馬路。



解法: 看到此種題目,第一件事通常是先離散化,原本題目為從起點至終點,穿過最少的線段,離散化後,題目則變為從起點點格至終點點格,穿過最少的點格牆。可以想像從起點倒水,若水被牆擋住就拆掉最外面那道牆,一直拆到水碰到終點,直接使用BFS來拆牆

(PS: 我有看到較好的方法,是把離散化後的圖,若下個點是馬路則邊權重為1,若非,則是0,求從起點至終點的最短路徑。)

TAG: BFS, 離散化

注意: NA

程式碼:

沒有留言:

張貼留言

任何意見都樂意傾聽