DFS BFS 总结
這兩三天做了不少DFS,BFS題。。
首先是BFS。。
1001.赤裸裸的BFS....注意標(biāo)記。。否則會(huì)MLE,RUNTIME ERROR。。BFS要占用非常多的內(nèi)存。。
不斷入隊(duì)。而DFS。。則容易TLE,需要根據(jù)題意剪枝,回溯。
1002 詭異的樓。變換了下。。電梯方向可以根據(jù)時(shí)間的奇偶性來(lái)判斷。
同是要用優(yōu)先隊(duì)列。。按時(shí)間從小到大排序。。
1003 knight moves..非常裸的BFS。。8個(gè)方向。處理好輸入就沒(méi)什么問(wèn)題啦
1004 asteriods.. 三維空間的BFS。。6個(gè)方向。沒(méi)有什么變化。
1005 rescue..剛開(kāi)始一看題,感覺(jué)非常簡(jiǎn)單。一交wa,才明白朋友可能有多個(gè)。。應(yīng)該從a搜索r..同時(shí)也要用優(yōu)先隊(duì)列。。選出最少時(shí)間
1006 連連看。。這題關(guān)鍵是要記錄每個(gè)點(diǎn)的方向。。和轉(zhuǎn)折次數(shù)。還要剪枝。。。用mark二維數(shù)組來(lái)記錄每個(gè)點(diǎn)的轉(zhuǎn)折次數(shù)。
1007 nightmare..這題不能用簡(jiǎn)單的走過(guò)的點(diǎn)標(biāo)記。。有可能某過(guò)點(diǎn)經(jīng)過(guò)之后再次經(jīng)過(guò)。。所以可以用生命值來(lái)剪枝。
開(kāi)個(gè)hash二維數(shù)組。。初始話為0.。。。起點(diǎn)為6,能走的點(diǎn)條件是它的生命值大于hash[x][y]...碰到4.重新賦值6.。。
1008 嘿嘿。這題太暴力了。。每次6種可能入隊(duì)。。寫(xiě)的我異常煩燥。改錯(cuò)誤該了好久。幸好最后AC了。。真的要冷靜再冷靜。。
DFS:
1001? 這題沒(méi)有奇偶剪枝。。果斷TLE。。。有了奇偶剪枝。。我忘記加。。if (flag) return; 繼續(xù)TLE。
1002? 這題裸的。不需剪枝
1003 這題也裸。關(guān)鍵在如何傳遞參數(shù)。把參數(shù)設(shè)置好了就不會(huì)有什么問(wèn)題。
1004 這題注意去重。。 if (x < i && A[x] == A[x-1]) continue; 要理解好遞歸函數(shù)調(diào)用機(jī)制
1005 對(duì)搜索過(guò)的點(diǎn)記憶下。很好的一題。。
1006 下沙下面的。需要回溯標(biāo)記已訪問(wèn)的點(diǎn)。然后枚舉每一種可能。然后選出最小的。
1007 和1006類(lèi)似。
1008 變形課。。我把它轉(zhuǎn)換成鄰接矩陣來(lái)搜索。最后寫(xiě)了個(gè)有返回值的DFS。。一直wa..寫(xiě)錯(cuò)了悲劇。旭幫我。改成void 型就AC了。還是沒(méi)有完全理解好遞歸函數(shù)的機(jī)制。
無(wú)論是BFS。還是DFS。。都是盲目式的搜索。枚舉每一中可能。。剪枝。。找到所求解。等以后有充足時(shí)間了好好看下啟發(fā)式搜索。。
轉(zhuǎn)載于:https://www.cnblogs.com/tangcong/archive/2011/08/12/2136527.html
總結(jié)
以上是生活随笔為你收集整理的DFS BFS 总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 粒子编辑器的选择1
- 下一篇: SDNU 1263.C语言程序设计教程(