數據結構和算法教學
環境設置
數據結構算法基礎
數據結構漸近分析
數據結構基本概念
數組
哈希表
哈希表實例程序(C語言)
鏈表
鏈表實例程序(C語言)
雙向鏈表
循環鏈表
循環鏈表實例程序(C語言)
堆棧
堆棧實例代碼(C語言)
表達式分析
隊列
隊列實例代碼(C語言)
隊列優先級
線性搜索(查找)
線性搜索實例程序(C語言)
二進制搜索(查找)
二進制搜索/查找程序(C語言)
冒泡排序算法
冒泡排序算法實例程序(C語言)
插入排序
選擇排序
選擇排序實例程序(C語言)
合併排序算法
合併排序算法實例程序(C語言)
希爾排序
希爾排序實例程序(C程序)
快速排序
快速排序實例程序(C語言)
圖數據結構
深度優先遍歷
廣度優先遍歷
樹(二叉樹)
樹遍歷
二叉搜索樹
堆
遞歸基礎知識
深度優先遍歷
深度優先搜索算法
深度優先搜索算法(DFS)遍歷深度區運動的圖並使用堆棧記下要獲得的下一個頂點,當一個死尾發生時迭代開始搜索。
正如上面給出的例子,DFS算法從A遍歷到B到C再到D到E,然後到F,最後到G它採用下列規則。
規則 1 − 訪問鄰近的未訪問頂點。標記它已訪問。並顯示它,最後將其推入堆棧。
規則 2 − 如果沒有相鄰頂點發現,從堆棧中彈出一個頂點。(它會從棧彈出沒有相鄰頂點的所有頂點)
規則 3 − 重複第1條和第2條,直到堆棧爲空。
void depthFirstSearch(){
int i;
//mark first node as visited
lstVertices[0]->visited = true;
//display the vertex
displayVertex(0);
//push vertex index in stack
push(0);
while(!isStackEmpty()){
//get the unvisited vertex of vertex which is at top of the stack
int unvisitedVertex = getAdjUnvisitedVertex(peek());
//no adjacent vertex found
if(unvisitedVertex == -1){
pop();
}else{
lstVertices\[unvisitedVertex\]->visited = true;
displayVertex(unvisitedVertex);
push(unvisitedVertex);
}
}
//stack is empty, search is complete, reset the visited flag
for(i = 0;i < vertexCount;i++){
lstVertices[i]->visited = false;
}
}