都說現今記憶體不值錢了,哈,也就不考慮空間複雜度的問題了,弄了倆輔助陣列,覺得解這題還是挺容易的,就是不知道有沒有bug。
問題描述:
假設圖g採用鄰接表儲存,編寫乙個實現連通圖g的深度優先遍歷(從頂點v出發)的非遞迴演算法。
演算法思路:
就是深度優先的思路。同樣是乙個visited陣列,標記已訪問過的頂點。又用了乙個_vertex陣列,用於存放頂點。
演算法實現:
#include
#include
#include
#define maxsize 100
typedef char infotype;
typedef char vertex;
typedef struct anode //定義弧型別
arcnode;
typedef struct //定義頂點型別
vertexnode;
typedef struct //定義圖型別
algraph;
void createalgraph(algraph *&g,int array[maxsize],int k) //傳遞乙個鄰接矩陣建立圖
g->n=k;g->e=cnt;
}void dfs(algraph *g,int v,int visited,int _vertex) //dfs()
else //否則找下乙個相鄰頂點
p=p->nextarc;
}for(int j=0;j<=i;j++) //列印出_vertex陣列中的內容,即連通圖的所有頂點
printf("%d ",_vertex[j]);
printf("/n");
}int main() //主函式呼叫,,
,,};algraph *g;
createalgraph(g,graph_array,5);
int visited[maxsize]=;
int _vertex[maxsize]=;
dfs(g,2,visited,_vertex);
return 0;
}輸出:
2 4 3 1 0
非遞迴dfs演算法
都說現今記憶體不值錢了,哈,也就不考慮空間複雜度的問題了,弄了倆輔助陣列,覺得解這題還是挺容易的,就是不知道有沒有bug。問題描述 假設圖g採用鄰接表儲存,編寫乙個實現連通圖g的深度優先遍歷 從頂點v出發 的非遞迴演算法。演算法思路 就是深度優先的思路。同樣是乙個visited陣列,標記已訪問過的頂...
非遞迴DFS遍歷
dfs就是回溯法,用遞迴的方法是很自然的。那麼該如何遞迴呢?簡單的說就是 1 如果當前節點沒有被搜尋過,那麼處理當前節點,並標記為搜尋過 如果當前節點已經被搜尋過,退出 2 遞迴遍歷所有沒有被搜尋過的臨接節點。注意,第一步的退出條件。遞迴必須有退出條件,否則會出現死迴圈。對任意節點呼叫上述dfs函式...
非遞迴實現DFS的DFS函式體
1.棧初始化 2.起始點入棧 3.迴圈語句直到棧為空 int graph depthfirst graph g,int start,edge tree 從start號頂點出發深度優先遍歷,編號從開始 返回訪問到的頂點數,tree輸出遍歷樹 返回的tree 0 是 1,start 真正的遍歷樹儲存在t...