数据结构—邻接表的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相关推荐

  1. 数据结构---邻接表的BFS

    数据结构-邻接表的BFS 原理:参考趣学数据结构 代码: 队列代码: #pragma once #define elemType int #define N 100 #include<stdli ...

  2. JAVA实现图的邻接表以及DFS

    一:定义邻接表结构储存图 package 图的遍历;//邻接表实现图的建立//储存边 class EdgeNode {int index; // 习惯了用index,其实标准写法是(adjVertex ...

  3. 邻接表/图/DFS/BFS

    目录 存储形式 采用邻接表法创建无向网 邻接表的特点 邻接矩阵与邻接表表示法的关系 完整代码 存储形式 顶点的结构 typedef struct VNode {VerTexType data; //顶 ...

  4. leetcode 399. Evaluate Division | 399. 除法求值(图的邻接表,DFS)

    题目 https://leetcode.com/problems/evaluate-division/ 题解 题目看着复杂,实际上是图的 DFS. 例如,已知 a/b, b/c, c/d,想求 a/d ...

  5. Java数据结构——邻接矩阵+邻接表

    文章目录 一.邻接矩阵 二.邻接表 一.邻接矩阵 1. 定义 vexs[](存储顶点)和 arcs[][](存储边关系,叫邻接矩阵)集合.因此,用一个一维数组存放图中所有顶点数据: 用一个二维数组存放 ...

  6. PTA 旅游规划(邻接表) 思路分析及代码解析

    PTA 旅游规划_使用邻接表 思路分析及代码解析v1.0 一.前导 1. 需要掌握的知识 2. 题目信息 二.解题思路分析 1. 题意理解 1. 1 输入数据 1.2 输出数据 2. 思路分析(重点) ...

  7. 数据结构(廿六) -- C语言版 -- 图 - 图的遍历 -- 邻接表 - 深度/广度优先遍历/搜索(DFS、BFS)

    内容预览 零.读前说明 一.深度优先遍历 1.1.深度优先的遍历过程 1.2.深度优先的遍历实现代码 二.广度优先遍历 2.1.广度优先的遍历过程 2.2.广度优先的遍历实现代码 三.源码测试效果 3 ...

  8. 数据结构与算法(7-2)图的遍历(深度优先遍历DFS、广度优先遍历BFS)(分别用邻接矩阵和邻接表实现)

    目录 深度优先遍历(DFS)和广度优先遍历(BFS)原理 1.自己的原理图 2.官方原理图 一.邻接矩阵的深度优先遍历(DFS) 1.原理图 2. 过程: 3.总代码 二.邻接表的深度优先遍历(DFS ...

  9. 《数据结构与算法》实验报告——无向图邻接表的构造

    <数据结构>实验报告 学号:2018329621200 机器号10-414-28 姓名: 申屠志刚 日期:2019/12/9 程序名:main.cpp 实验内容: 无向图邻接表的构造 一. ...

最新文章

  1. Spring Aware 到底是个啥?
  2. python中__init__后面加特殊符号_详解Python中的__new__、__init__、__call__三个特殊方法...
  3. 移动測试技术保护源码!解码全球首款移动端白盒測试工具ThreadingTest (文章转自己主动点科技)...
  4. 以前的学习笔记整理:第二层交换和生成树协议(STP)
  5. 时间序列研(part7)--单位根检验
  6. 排序算法时间复杂度、空间复杂度、稳定性比较
  7. 关于Spring Cloud微服务框架的一些概念
  8. 加密软件漏洞评测系统_【E周道】Elasticsearch泄露12亿用户数据 开源VNC存在37个漏洞...
  9. 船舶网络搭建项目案例
  10. 360安全浏览器划词翻译_有种遗憾是这些浏览器插件你一个没用过
  11. 【科普向】5G核心网架构和关键技术
  12. coreldraw橙子怎么画_cdr怎么画一杯橙汁?CorelDRAW简单绘制的一杯满满的橙汁教程...
  13. 修复Windows 7升级Windows 10后Japanese输入法无法使用的Bug
  14. POC_若依管理系统
  15. 团队如何提高执行力,总结以下几点:
  16. 毕业论文开题报告模板
  17. android eclipse加密,Elliptic Curve Cryptography:在eclipse android中使用NFC发送加密消息
  18. 收集的一些计算机硬件知识
  19. PL/0语言 词法分析
  20. Html上传文件php处理上传文件

热门文章

  1. Android之自定义ContentProvider详解
  2. 元素周期表排列的规律_中考化学:金属活动性顺序表和元素周期表规律总结
  3. python用pandas读取excel_Python使用pandas读取Excel文件数据和预处理小案例
  4. js监听多个事件_JavaScript中的事件与异常捕获解析
  5. 这道题号称无人能解!300多年来无一人答对,却让这群人这么简单就解出来了?...
  6. 资料分享 | 数学建模竞赛备战大全
  7. 李国庆离开当当,广东消委会告长隆,智能校服提供定位功能,全球首个5G火车站来了,这就是今天的大新闻...
  8. 搞笑动图:这些痛,只有程序员懂…
  9. 逻辑回归算法背后的数学
  10. hash算法_到底什么是Hash?Hash算法的原理和实际应用讲解