当前位置: 首页 > news >正文

数据结构深度优先搜索遍历连通图+非连通图(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如下: 使用邻接表去创建上面这个无向图&#xff0c;然后再使用书本DFS函数以及DFSTraverse函数实现深度优先搜索遍历 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #…...

信息安全工程师(55)网络安全漏洞概述

一、定义 网络安全漏洞&#xff0c;又称为脆弱性&#xff0c;是网络安全信息系统中与安全策略相冲突的缺陷&#xff0c;这种缺陷也称为安全隐患。漏洞可能导致机密性受损、完整性破坏、可用性降低、抗抵赖性缺失、可控性下降、真实性不保等问题。 二、分类 网络安全漏洞可以根据…...

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蓝图中整理节点的方法 第一种&#xff1a;子图 右键选中的节点&#xff0c;出现一个面板&#xff0c;点击 Collapse Nodes 既可折叠选中的所有节点 注意&#xff1a;子图不可以被复制使用。 双击子图可以查看节点&#xff0c;若不想折叠选中的节点为子图&#xff0c;右键点…...

01,http 协议

1 &#xff0c;http 协议 &#xff1a;介绍 1 &#xff0c;http &#xff1a;是什么 Hyper Text Transfer Protocol &#xff1a;超文本传输协议 2 &#xff0c;传输内容 &#xff1a;文本 1 &#xff0c;内容 &#xff1a;      纯文本    2 &#xff0c;特殊 &#xf…...

在 typescript 中,如何封装一个 class 类来接收接口的响应数据

在 TypeScript 中&#xff0c;封装一个类来接收接口的响应数据是一个常见的需求&#xff0c;特别是在处理后端 API 响应时。这通常涉及到定义与后端 API 响应结构相匹配的接口&#xff08;或类型&#xff09;&#xff0c;并在类中创建方法来处理这些数据。以下是一个简单的示例…...

力扣周赛第420场 中等 3325.字符至少出现k次的子字符串 I

文章目录 题目介绍题解 题目介绍 题解 滑动窗口思想&#xff1a;参考 3.无重复字符的最长子串 链接 代码如下&#xff1a; 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&#xff1f;O.o什么是耦合度&#xff1f; 创建第一个IoC程序导入必要依赖编写接口和实现类编写Spring核心配置文件测试类进行测试 Spring配置文件Bean对象的…...

Java项目-基于springboot框架的智慧外贸系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…...

Python程序控制结构 if语句详解

前面我们已经详细介绍了Python编程基础入门&#xff1a;从风格到数据类型再到表达式 在编程中&#xff0c;控制结构决定了代码的执行顺序。Python提供了丰富的控制结构&#xff0c;可以帮助程序根据不同条件做出不同的决策和操作。本文将深入介绍Python中常见的控制结构——包…...

【ppq install】

简介 PPQ 是 Sensetime OpenPPL 团队开源的量化部署工具&#xff0c;经过量化的神经网络往往能够在端侧加速600%~800%&#xff0c;而在目前已经支持OpenPPL, TensorRT, SNPE, NXP, Metax等多个不同平台的量化模拟与网络部署。PPQ 不仅限于提供强大而先进的量化优化算法&#x…...

3DGS相关方法conda环境配置

环境&#xff1a;ubuntu22.04&#xff0c;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】引言 前序教程中的曲线动态输出&#xff0c;其实是把曲线按照左右移动的形式输出&#xff08;波的传递形式&#xff09;。 python画图|曲线动态输出基础教程_python 动态曲线-CSDN博客 但有些时候我们更期待的是曲线不移动&#xff0c;随着自变量的增加而输出因变量&am…...

电子商务类型

常见电子商务类型及其代表性的例子&#xff1a; B2B&#xff08;Business to Business&#xff09; 定义&#xff1a;B2B 模式是指企业与企业之间的商业交易。在这种模式下&#xff0c;企业通过电子商务平台相互提供产品或服务。 特点&#xff1a; 大宗交易&#xff1a;通常…...

vue elementui el-table实现增加行,行内编辑修改

需求&#xff1a; 前端进行新增表单时&#xff0c;同时增加表单的明细数据。明细数据部分&#xff0c;可进行行编辑。 效果图&#xff1a; <el-card><div slot"header"><span style"font-weight: bold">外来人员名单2</span><…...

1. Redis简介与安装

1.1 什么是Redis Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、基于内存的数据结构存储系统&#xff0c;支持多种数据结构&#xff0c;如字符串、列表、集合、有序集合和哈希。它不仅能作为一个高效的缓存工具&#xff0c;还能作为消息队列、分布式锁和…...

Redis的持久化存储和集群管理操作

Redis 的持久化存储和集群 一、引言 Redis 是一个开源的内存数据结构存储系统&#xff0c;被广泛应用于缓存、消息队列、排行榜等场景。然而&#xff0c;由于数据存储在内存中&#xff0c;一旦服务器重启或出现故障&#xff0c;数据就会丢失。为了解决这个问题&#xff0c;Re…...

Auto-encoder(自编码器)

Auto-encoder&#xff08;自编码器&#xff09; 1 基本概念 自编码就和之前的cycle GAN的概念很像&#xff0c;假設你有非常大量的圖片&#xff0c;在 Auto-Encoder 裡面你有兩個 Network&#xff0c;一個叫做 Encoder&#xff0c;一個叫做 Decoder&#xff0c;他們就是兩個 N…...

Vue+sortable+el-table表格排序使用指南

前言 这两天遇到一个需求&#xff1a;在点击【设置优先级】的按钮后弹出关于玩法类型的table&#xff0c;点击【排序】按钮可以后可以进行排序。由于组内使用的组件库是 element-ui&#xff0c;那我首先就想到了使用 el-table组件&#xff0c;但奈何其版本原因不能相应的拖拽排…...

表数据删一半,为什么表文件大小不变?

参数innodb_file_per_table 这个参数设置为ON&#xff0c;表示每个表数据单独存在一个文件中&#xff0c;这时如果执行drop命令&#xff0c;系统会直接删除表文件。 这个参数设置为off时&#xff0c;所有表的数据和索引都存在共享的.ibdata文件&#xff0c;即使表删掉了&…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...