日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构---邻接表的DFS

發布時間:2023/12/4 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构---邻接表的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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。