(BFS)Meteor Shower (poj3669)
題目:
Bessie聽說有場史無前例的流星雨即將來臨;有讖言:隕星將落,徒留灰燼。為保生機(jī),她誓將找尋安全之所(永避星墜之地)。目前她正在平面坐標(biāo)系的原點(diǎn)放牧,打算在群星斷其生路前轉(zhuǎn)移至安全地點(diǎn)。
此次共有M (1 ≤ M ≤ 50,000)顆流星來襲,流星i將在時(shí)間點(diǎn)Ti (0 ≤ Ti ≤ 1,000) 襲擊點(diǎn) (Xi, Yi) (0 ≤ Xi ≤ 300; 0 ≤ Yi ≤ 300)。每顆流星都將摧毀落點(diǎn)及其相鄰四點(diǎn)的區(qū)域。
Bessie在0時(shí)刻時(shí)處于原點(diǎn),且只能行于第一象限,以平行與坐標(biāo)軸每秒一個(gè)單位長度的速度奔走于未被毀壞的相鄰(通常為4)點(diǎn)上。在某點(diǎn)被摧毀的剎那及其往后的時(shí)刻,她都無法進(jìn)入該點(diǎn)。
尋找Bessie到達(dá)安全地點(diǎn)所需的最短時(shí)間。
Input - 輸入
* 第1行: 一個(gè)整數(shù): M
* 第2..M+1行: 第i+1行包含由空格分隔的三個(gè)整數(shù): Xi, Yi, and Ti
Output - 輸出
* 僅一行: Bessie尋得安全點(diǎn)所花費(fèi)的最短時(shí)間,無解則為-1。
Sample Input - 輸入樣例
4
0 0 2
2 1 2
1 1 2
0 3 5
Sample Output - 輸出樣例
5
分析與解答:
這里沒有給出圖,而是通過一些數(shù)據(jù)讓你先建一個(gè)圖,map[i][j]存的是這個(gè)點(diǎn)的爆炸時(shí)間,我們初始化最大時(shí)間,然后輸入數(shù)據(jù)是把這個(gè)數(shù)以及他上下左右四個(gè)方位全部的時(shí)間填上,這里可能會(huì)重復(fù)爆,我們寫最早爆的時(shí)間,也就是最小的時(shí)間。
然后我們從(0,0)開始搜,bfs中先把(0,0)放入隊(duì)列,然后只要隊(duì)列不為空,就繼續(xù)搜,先取出隊(duì)首元素。由于如果某個(gè)點(diǎn)被炸掉,他就不可能停在該點(diǎn),最終她停的點(diǎn)一定是沒有被炸的那個(gè)點(diǎn),也就是說如果隊(duì)首元素的map值是我們一開始賦的值maxn,那我們就可以返回這個(gè)點(diǎn)的時(shí)間了。如果沒返回,就繼續(xù)上下左右遍歷,更改點(diǎn)的坐標(biāo)以及時(shí)間,如果這個(gè)點(diǎn)沒出現(xiàn)過,而且他在第一象限,而且此時(shí)此刻的時(shí)間小于map里開始爆的時(shí)間,那就說明可以走這個(gè)點(diǎn),就把這個(gè)點(diǎn)push到隊(duì)列里,并做上標(biāo)記
這個(gè)代碼稍微改一點(diǎn)就wa,一次時(shí)main里那個(gè)t,不能寫成map[i][j],還有一個(gè)是bfs里面參數(shù)的位置,稍微一改就錯(cuò),具體錯(cuò)到哪我調(diào)試了兩小時(shí)沒調(diào)出來md以后干脆先建結(jié)點(diǎn)再判斷吧,參數(shù)再for里for外if里if外這東西我頭疼
代碼參考:
https://blog.csdn.net/coraline_m/article/details/18035393
總結(jié)
以上是生活随笔為你收集整理的(BFS)Meteor Shower (poj3669)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java web导入tomcat_记一次
- 下一篇: (枚举)餐厅点餐(fzu2086)