数据结构深度优先搜索遍历连通图+非连通图(C语言代码+遍历+终端输入内容)
首先数据结构(C语言版第二版)的关于深度优先搜索遍历连通图的图G4如下:

使用邻接表去创建上面这个无向图,然后再使用书本DFS函数以及DFSTraverse函数实现深度优先搜索遍历
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#define MAXVEX 20
//下面三个结构体就是邻接表的结构体,完全一样的方式
typedef struct EdgeNode
{int adjvex;struct EdgeNode* next;
}EdgeNode;
typedef struct VertexNode
{char data;EdgeNode* firstedge;
}VertexNode;
typedef struct
{VertexNode adjlist[MAXVEX];int numVertexs;int numEdges;
}GraphAdjlist;
int visited[10];//一个标记数组,记录遍历过的不会重复遍历
//创建邻接表
void CreateALGraph(GraphAdjlist* G)
{int i, j, k;EdgeNode* p;printf("请输入顶点数+边数\n");scanf("%d%d", &G->numVertexs, &G->numEdges);getchar();//接收scanf残留的换行符\nprintf("请输入顶点的信息\n");for (i = 0; i < G->numVertexs; i++){scanf("%c", &G->adjlist[i].data);G->adjlist[i].firstedge = NULL;//初始化指向边表的指针为null}for (k = 0; k < G->numEdges; k++){printf("请输入(vi,vj)的头,尾,一共有%d条\n", G->numEdges);scanf("%d%d", &i, &j);//我们这里是实现深度遍历连通图的无向图p = (EdgeNode*)malloc(sizeof(EdgeNode));p->adjvex = j;p->next = G->adjlist[i].firstedge;G->adjlist[i].firstedge = p;p = (EdgeNode*)malloc(sizeof(EdgeNode));p->adjvex = i;p->next = G->adjlist[j].firstedge;G->adjlist[j].firstedge = p;}printf("邻接表创建成功\n");
}
void DFS(GraphAdjlist* G,int i)
{EdgeNode* p;visited[i] = 1;printf("%c ", G->adjlist[i].data);//先把这个顶点值输出,有点类似树的先序遍历(根左右)p = G->adjlist[i].firstedge;while (p!=NULL){if (visited[p->adjvex] == 0){DFS(G, p->adjvex);}p = p->next;}
}
void DFSTraverse(GraphAdjlist* G)
{int i;for (i = 0; i < G->numVertexs; i++){visited[i] = 0;//全部初始为0,然后遍历过的(vi,vj)就置为1 由未访问 -> 已访问}for (i = 0; i < G->numVertexs; i++){if (visited[i] == 0){DFS(G, i);}}
}
int main()
{GraphAdjlist G;CreateALGraph(&G);printf("深度遍历如下\n");DFSTraverse(&G);return 0;
}
关于深度遍历,很相似树的前序遍历(根左右),如果出现(根右左),其实这个问题也就是邻接表边表插入结点的时候,我们使用的是头插法,所以才有时候出现深度优先遍历会出现根右左,这个没关系的,不重复遍历就好
下面是终端输入内容:
请输入顶点数+边数
8 9
请输入顶点的信息
01234567
请输入(vi,vj)的头,尾,一共有9条
0 1
请输入(vi,vj)的头,尾,一共有9条
0 2
请输入(vi,vj)的头,尾,一共有9条
1 3
请输入(vi,vj)的头,尾,一共有9条
1 4
请输入(vi,vj)的头,尾,一共有9条
3 7
请输入(vi,vj)的头,尾,一共有9条
4 7
请输入(vi,vj)的头,尾,一共有9条
2 5
请输入(vi,vj)的头,尾,一共有9条
2 6
请输入(vi,vj)的头,尾,一共有9条
5 6
邻接表创建成功
深度遍历如下
0 2 6 5 1 4 7 3
下标全部+1就可以查看12345678的遍历情况
关于非连通图,代码通用的;
数据结构书本关于深度优先搜索遍历的非连通图如下:

终端输入内容如下:
请输入顶点数+边数
8 8
请输入顶点的信息
01234567
请输入(vi,vj)的头,尾,一共有8条
0 1
请输入(vi,vj)的头,尾,一共有8条
1 3
请输入(vi,vj)的头,尾,一共有8条
1 4
请输入(vi,vj)的头,尾,一共有8条
3 7
请输入(vi,vj)的头,尾,一共有8条
4 7
请输入(vi,vj)的头,尾,一共有8条
2 5
请输入(vi,vj)的头,尾,一共有8条
2 6
请输入(vi,vj)的头,尾,一共有8条
5 6
邻接表创建成功
深度遍历如下
0 1 4 7 3 2 6 5
非连续图中的边数由9 -> 8
相关文章:
数据结构深度优先搜索遍历连通图+非连通图(C语言代码+遍历+终端输入内容)
首先数据结构(C语言版第二版)的关于深度优先搜索遍历连通图的图G4如下: 使用邻接表去创建上面这个无向图,然后再使用书本DFS函数以及DFSTraverse函数实现深度优先搜索遍历 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #…...
信息安全工程师(55)网络安全漏洞概述
一、定义 网络安全漏洞,又称为脆弱性,是网络安全信息系统中与安全策略相冲突的缺陷,这种缺陷也称为安全隐患。漏洞可能导致机密性受损、完整性破坏、可用性降低、抗抵赖性缺失、可控性下降、真实性不保等问题。 二、分类 网络安全漏洞可以根据…...
member access within null pointer of type ‘ListNode‘
文章目录 前言一、空指针解引用二、访问已释放的内存三、 结构体定义问题四、错误的链表操作五、代码上下文六、示例代码七、调试建议 前言 p -> next p1; p1 p1 -> next; p p->next;runtime error: member access within null pointer of type ListNode如果出现…...
UE5蓝图中整理节点的方法
UE5蓝图中整理节点的方法 第一种:子图 右键选中的节点,出现一个面板,点击 Collapse Nodes 既可折叠选中的所有节点 注意:子图不可以被复制使用。 双击子图可以查看节点,若不想折叠选中的节点为子图,右键点…...
01,http 协议
1 ,http 协议 :介绍 1 ,http :是什么 Hyper Text Transfer Protocol :超文本传输协议 2 ,传输内容 :文本 1 ,内容 : 纯文本 2 ,特殊 …...
在 typescript 中,如何封装一个 class 类来接收接口的响应数据
在 TypeScript 中,封装一个类来接收接口的响应数据是一个常见的需求,特别是在处理后端 API 响应时。这通常涉及到定义与后端 API 响应结构相匹配的接口(或类型),并在类中创建方法来处理这些数据。以下是一个简单的示例…...
力扣周赛第420场 中等 3325.字符至少出现k次的子字符串 I
文章目录 题目介绍题解 题目介绍 题解 滑动窗口思想:参考 3.无重复字符的最长子串 链接 代码如下: class Solution {public int numberOfSubstrings(String s, int k) {int n s.length(), res 0;for(int left 0; left < n; left){// 记录窗口内…...
【Spring框架】Spring核心思想IoC以及依赖注入DI详解
目录 Spring框架前言 服务端三层开发表现层业务层持久层 Spring框架的概述Spring框架的优点Spring核心——IoC什么是IoC?O.o什么是耦合度? 创建第一个IoC程序导入必要依赖编写接口和实现类编写Spring核心配置文件测试类进行测试 Spring配置文件Bean对象的…...
Java项目-基于springboot框架的智慧外贸系统项目实战(附源码+文档)
作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…...
Python程序控制结构 if语句详解
前面我们已经详细介绍了Python编程基础入门:从风格到数据类型再到表达式 在编程中,控制结构决定了代码的执行顺序。Python提供了丰富的控制结构,可以帮助程序根据不同条件做出不同的决策和操作。本文将深入介绍Python中常见的控制结构——包…...
【ppq install】
简介 PPQ 是 Sensetime OpenPPL 团队开源的量化部署工具,经过量化的神经网络往往能够在端侧加速600%~800%,而在目前已经支持OpenPPL, TensorRT, SNPE, NXP, Metax等多个不同平台的量化模拟与网络部署。PPQ 不仅限于提供强大而先进的量化优化算法&#x…...
3DGS相关方法conda环境配置
环境:ubuntu22.04,cuda_11.7 conda create -n 3dgs python3.8 -y conda activate 3dgs python -m pip install --upgrade pip pip uninstall torch torchvision functorch tinycudann pip install torch2.1.2cu118 torchvision0.16.2cu118 torchaudio2…...
python画图|曲线动态输出
【1】引言 前序教程中的曲线动态输出,其实是把曲线按照左右移动的形式输出(波的传递形式)。 python画图|曲线动态输出基础教程_python 动态曲线-CSDN博客 但有些时候我们更期待的是曲线不移动,随着自变量的增加而输出因变量&am…...
电子商务类型
常见电子商务类型及其代表性的例子: B2B(Business to Business) 定义:B2B 模式是指企业与企业之间的商业交易。在这种模式下,企业通过电子商务平台相互提供产品或服务。 特点: 大宗交易:通常…...
vue elementui el-table实现增加行,行内编辑修改
需求: 前端进行新增表单时,同时增加表单的明细数据。明细数据部分,可进行行编辑。 效果图: <el-card><div slot"header"><span style"font-weight: bold">外来人员名单2</span><…...
1. Redis简介与安装
1.1 什么是Redis Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统,支持多种数据结构,如字符串、列表、集合、有序集合和哈希。它不仅能作为一个高效的缓存工具,还能作为消息队列、分布式锁和…...
Redis的持久化存储和集群管理操作
Redis 的持久化存储和集群 一、引言 Redis 是一个开源的内存数据结构存储系统,被广泛应用于缓存、消息队列、排行榜等场景。然而,由于数据存储在内存中,一旦服务器重启或出现故障,数据就会丢失。为了解决这个问题,Re…...
Auto-encoder(自编码器)
Auto-encoder(自编码器) 1 基本概念 自编码就和之前的cycle GAN的概念很像,假設你有非常大量的圖片,在 Auto-Encoder 裡面你有兩個 Network,一個叫做 Encoder,一個叫做 Decoder,他們就是兩個 N…...
Vue+sortable+el-table表格排序使用指南
前言 这两天遇到一个需求:在点击【设置优先级】的按钮后弹出关于玩法类型的table,点击【排序】按钮可以后可以进行排序。由于组内使用的组件库是 element-ui,那我首先就想到了使用 el-table组件,但奈何其版本原因不能相应的拖拽排…...
表数据删一半,为什么表文件大小不变?
参数innodb_file_per_table 这个参数设置为ON,表示每个表数据单独存在一个文件中,这时如果执行drop命令,系统会直接删除表文件。 这个参数设置为off时,所有表的数据和索引都存在共享的.ibdata文件,即使表删掉了&…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
