数据结构---邻接表的DFS
生活随笔
收集整理的這篇文章主要介紹了
数据结构---邻接表的DFS
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數據結構—鄰接表的DFS
原理:參考趣學數據結構
代碼:
#include<stdio.h> #include<stdlib.h> #define typeNode int //每個頭結點的標識數據類型 #define N 100 //最大結點數 int degree[N]; int result[N]; bool visited[N]; typedef struct dNode {//每個頭結點后緊跟的單位結點int data;struct dNode * next; }dNode; typedef struct mNode {//鄰接表中每一行的頭結點typeNode data;dNode * first;//指向第一個有效的后繼結點 }mNode; typedef struct {mNode vNode[N];//所有頭結點int vNum, eNum;//圖中頂點的數量和邊數量 }zNode; void init(zNode &ZNode) {printf("規定頂點從0開始取\n");scanf_s("%d%d", &ZNode.vNum, &ZNode.eNum);//輸入有向圖的頂點數和邊數for (int i = 0; i < ZNode.vNum; i++) {//規定頂點從0開始取scanf_s("%d", &ZNode.vNode[i].data);ZNode.vNode[i].first = NULL;}for (int i = 0; i < ZNode.eNum; i++) {//頭插法int u, v;scanf_s("%d%d", &u, &v);//u頂點到v頂點有邊dNode* p = new dNode();p->data = v;p->next = ZNode.vNode[u].first;//只有指針域,指向地址ZNode.vNode[u].first= p;} } void print12(zNode ZNode) {printf("遍歷鏈表:\n");for (int i = 0; i < ZNode.vNum; i++) {dNode* temp = ZNode.vNode[i].first;printf("%d ->", ZNode.vNode[i].data);while(temp){printf("%d ->",temp->data);temp = temp->next;}printf("NULL\n");} } void DFSLinkGraph(zNode ZNode, int u) {//鄰接表的DFSvisited[u] = true;printf("%d ", u);dNode* p = ZNode.vNode[u].first;while (p) {int v = p->data;if (!visited[v]) {DFSLinkGraph(ZNode, v);}p = p->next;} } int main() {zNode ZNode;printf("鄰接表的構造:\n");init(ZNode);print12(ZNode);for (int i = 0; i < ZNode.vNum; i++) {visited[i] = false;}printf("DFS遍歷鄰接表\n");DFSLinkGraph(ZNode, 0);printf("\n");system("pause");return 0; }測試截圖:
時間復雜度O(n +e),空間復雜度O(n)
如果存在什么問題,歡迎批評指正!謝謝!
總結
以上是生活随笔為你收集整理的数据结构---邻接表的DFS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qq更换绑定手机号怎么更换
- 下一篇: 五号特工组演员表 马云飞是谁演的