從遞歸問題繼續看c++數據結構

最近看遞歸問題感覺好了很多,最近看書上代碼發現遞歸問題有兩個很不錯的屬性。第一,深度搜索。這個屬性有很多應用,例如樹的深度計算,樹的遍歷節點,還有圖的廣度搜索,深度搜索.......真的得用的很多。第二,就是原路返回的特性,譬如在樹的遍歷的時候(假設這條邊是左邊,中序遍歷的時候),基本上都是先沿着左邊走,遍歷到最後開始返回,返回倒數第一個根節點,再走右邊,在返回上一層的根節點,再次走右邊,

大概的僞代碼就是

void midorder (樹節點 * t)

{

if (t != null)

{

midorder (t ->left);

visit (t);

midorder (t->right) ;

}

}

還有對於路徑深度搜索的迷宮問題,這個原路返回的作用也十分重要,不然走進死衚衕,將不能原路返回。

這幾天看了幾段路徑收縮問題,其中有個Dijkstra 算法,看了好久都沒看懂,看了別人寫的最短路徑的程序,找了幾篇文章仔細琢磨半天,才弄明白。順便百度了一下貪心算法,就是局部最優的處理,簡單舉個例子說就是三角形兩條邊的和大於第三條邊。這個Dijkstra算法也有變相用到這種原理。首先先確定一個起始點,一個結束點,兩個點之間不直接相連接的點定義距離無窮大,當然還要保證權重一定大於等於0,根據深度算法廣度算法去遍歷節點,生成一個數組,如果有交叉路,就採用貪心算法對其進行比較從遠點到該節點的長度,用小的將其覆蓋,覆蓋,覆蓋,並記錄下該節點。最後就能得出一個路徑。(其實說的很高大上,實際上當我們判斷這個的時候,潛意思也是這麼考慮的。)我最近正在看相關聯的源代碼,等讀懂之後,再繼續深入的討論這個。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章