非遞迴dfs演算法

2021-09-30 06:07:27 字數 1085 閱讀 2961

都說現今記憶體不值錢了,哈,也就不考慮空間複雜度的問題了,弄了倆輔助陣列,覺得解這題還是挺容易的,就是不知道有沒有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...