深度優先遍歷演算法的非遞迴實現

2021-06-09 03:40:22 字數 1152 閱讀 9141

深度優先遍歷演算法的非遞迴實現需要了解深度優先遍歷的執行過程,設計乙個棧來模擬遞迴實現中系統設定的工作棧,演算法的偽**描述為:

假設圖採用鄰接矩陣作為儲存結構,具體演算法如下:

[cpp]view plain

copy

print

?

深度優先遍歷演算法的非遞迴實現需要了解深度優先遍歷的執行過程,設計乙個棧來模擬遞迴實現中系統設定的工作棧,演算法的偽**描述為:   

假設圖採用鄰接矩陣作為儲存結構,具體演算法如下:  

class=cpp name="code"

>#include

#include 

using

namespacestd;  

#define  max_node 12

boolvisited[max_node] ;  

intstack[ max_node] ;  

queue<int> q;  

intmatric[max_node][max_node] =  

,  ,  

,  ,  

,  ,  

,  ,  

,  ,  

,  ,   

};  

voiddfs(intv)  

}  if( i == max_node)  

}  }voidbfs(intv)  

}  cout <

<

q.pop();  

}  }  

voidinit()  

}  intmain()  

class=cpp name="code"

>

生成迷宮的深度優先遍歷演算法的非遞迴實現

生成一張二維單路徑迷宮圖,可以想到的方法之一就是圖的遍歷。因為單路徑顧名思義就是要求每個節點能切只能訪問一次,這正好和圖的遍歷方法一樣。其次就是圖的遍歷保證了只有一條路徑。執行後即如下圖所示 首先建立乙個二維陣列,char maze h w 其中h和w必須是奇數,建立乙個空間足夠大的棧stack h...

樹的深度優先遍歷的非遞迴實現

1.前序遍歷的非遞迴實現 首先根結點入棧,然後執行迴圈條件為 top!1 的迴圈,依次出棧棧中元素,每齣棧乙個元素需要判斷其右孩子和左孩子是否存在 先右後左,因為棧是 先進後出 而前序遍歷是根左右的順序,先訪問的是左子樹,所以就要讓左子樹 棧以便先訪問 如果存在則將其入棧,否則一直出棧直到棧空為止,...

深度優先遍歷與廣度優先遍歷 遞迴與非遞迴思路

深度優先遍歷 1 深度優先遍歷的遞迴定義 圖的深度優先遍歷類似於樹的前序遍歷。採用的搜尋方法的特點是盡可能先對縱深方向進行搜尋。這種搜尋方法稱為深度優先搜尋 depth first search 相應地,用此方法遍歷圖就很自然地稱之為圖的深度優先遍歷 2.基本實現思想 1 訪問頂點v 2 從v的未被...