数据结构---邻接表的DFS
生活随笔
收集整理的這篇文章主要介紹了
数据结构---邻接表的DFS
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
數(shù)據(jù)結(jié)構(gòu)—鄰接表的DFS
原理:參考趣學(xué)數(shù)據(jù)結(jié)構(gòu)
代碼:
#include<stdio.h> #include<stdlib.h> #define typeNode int //每個(gè)頭結(jié)點(diǎn)的標(biāo)識(shí)數(shù)據(jù)類型 #define N 100 //最大結(jié)點(diǎn)數(shù) int degree[N]; int result[N]; bool visited[N]; typedef struct dNode {//每個(gè)頭結(jié)點(diǎn)后緊跟的單位結(jié)點(diǎn)int data;struct dNode * next; }dNode; typedef struct mNode {//鄰接表中每一行的頭結(jié)點(diǎn)typeNode data;dNode * first;//指向第一個(gè)有效的后繼結(jié)點(diǎn) }mNode; typedef struct {mNode vNode[N];//所有頭結(jié)點(diǎn)int vNum, eNum;//圖中頂點(diǎn)的數(shù)量和邊數(shù)量 }zNode; void init(zNode &ZNode) {printf("規(guī)定頂點(diǎn)從0開始取\n");scanf_s("%d%d", &ZNode.vNum, &ZNode.eNum);//輸入有向圖的頂點(diǎn)數(shù)和邊數(shù)for (int i = 0; i < ZNode.vNum; i++) {//規(guī)定頂點(diǎn)從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頂點(diǎn)到v頂點(diǎn)有邊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("鄰接表的構(gòu)造:\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; }測試截圖:
時(shí)間復(fù)雜度O(n +e),空間復(fù)雜度O(n)
如果存在什么問題,歡迎批評(píng)指正!謝謝!
總結(jié)
以上是生活随笔為你收集整理的数据结构---邻接表的DFS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qq更换绑定手机号怎么更换
- 下一篇: word List 08