8648 图的深度遍历

### 思路
1. **图的邻接表存储结构**:使用邻接表存储图的顶点和边信息。
2. **基本操作函数**:包括创建图、查找顶点、获取顶点值、获取第一个邻接顶点、获取下一个邻接顶点等。
3. **深度优先遍历(DFS)**:从某个顶点出发,递归地访问所有未访问的邻接顶点。

### 伪代码
1. **创建图**:
   - 读取图的类型、顶点数和边数。
   - 初始化顶点信息和邻接表。
   - 读取每条边的信息,更新邻接表。

2. **深度优先遍历(DFS)**:
   - 初始化访问标志数组。
   - 对每个未访问的顶点调用DFS函数。
   - 在DFS函数中,标记当前顶点为已访问,并递归访问所有未访问的邻接顶点。

### C++代码
 

#include "string.h"
#include "malloc.h"
#include "stdio.h"
#include "stdlib.h"typedef int InfoType;
#define MAX_NAME 3
typedef char VertexType[MAX_NAME];
#define MAX_VERTEX_NUM 20
typedef enum { DG, DN, AG, AN } GraphKind;typedef struct ArcNode {int adjvex;struct ArcNode *nextarc;InfoType *info;
} ArcNode;typedef struct {VertexType data;ArcNode *firstarc;
} VNode, AdjList[MAX_VERTEX_NUM];typedef struct {AdjList vertices;int vexnum, arcnum;int kind;
} ALGraph;int LocateVex(ALGraph G, VertexType u) {for (int i = 0; i < G.vexnum; ++i)if (strcmp(u, G.vertices[i].data) == 0)return i;return -1;
}void CreateGraph(ALGraph *G) {int i, j, k, w;VertexType va, vb;ArcNode *p;scanf("%d", &(*G).kind);scanf("%d%d", &(*G).vexnum, &(*G).arcnum);for (i = 0; i < (*G).vexnum; ++i) {scanf("%s", (*G).vertices[i].data);(*G).vertices[i].firstarc = NULL;}for (k = 0; k < (*G).arcnum; ++k) {if ((*G).kind == 1 || (*G).kind == 3)scanf("%d%s%s", &w, va, vb);elsescanf("%s%s", va, vb);i = LocateVex(*G, va);j = LocateVex(*G, vb);p = (ArcNode *)malloc(sizeof(ArcNode));p->adjvex = j;if ((*G).kind == 1 || (*G).kind == 3) {p->info = (int *)malloc(sizeof(int));*(p->info) = w;} else {p->info = NULL;}p->nextarc = (*G).vertices[i].firstarc;(*G).vertices[i].firstarc = p;if ((*G).kind >= 2) {p = (ArcNode *)malloc(sizeof(ArcNode));p->adjvex = i;if ((*G).kind == 3) {p->info = (int *)malloc(sizeof(int));*(p->info) = w;} else {p->info = NULL;}p->nextarc = (*G).vertices[j].firstarc;(*G).vertices[j].firstarc = p;}}
}VertexType *GetVex(ALGraph G, int v) {if (v >= G.vexnum || v < 0)exit(0);return &G.vertices[v].data;
}int FirstAdjVex(ALGraph G, VertexType v) {int v1 = LocateVex(G, v);ArcNode *p = G.vertices[v1].firstarc;if (p)return p->adjvex;elsereturn -1;
}int NextAdjVex(ALGraph G, VertexType v, VertexType w) {int v1 = LocateVex(G, v);int w1 = LocateVex(G, w);ArcNode *p = G.vertices[v1].firstarc;while (p && p->adjvex != w1)p = p->nextarc;if (!p || !p->nextarc)return -1;elsereturn p->nextarc->adjvex;
}int visited[MAX_VERTEX_NUM];
void (*VisitFunc)(char *v);void DFS(ALGraph G, int v) {visited[v] = 1;VisitFunc(G.vertices[v].data);for (int w = FirstAdjVex(G, G.vertices[v].data); w >= 0; w = NextAdjVex(G, G.vertices[v].data, G.vertices[w].data)) {if (!visited[w])DFS(G, w);}
}void DFSTraverse(ALGraph G) {for (int i = 0; i < G.vexnum; i++)visited[i] = 0;VisitFunc = print;for (int i = 0; i < G.vexnum; i++) {if (!visited[i])DFS(G, i);}printf("\n");
}void print(char *i) {printf("%s ", i);
}int main() {ALGraph g;CreateGraph(&g);DFSTraverse(g);return 1;
}

### 总结
该代码实现了图的邻接表存储结构,并提供了基本操作函数和深度优先遍历算法。通过输入图的类型、顶点数、边数和边的信息,构建图的邻接表,并进行深度优先遍历,输出遍历结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1555148.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

车载项目:HIL测试、功能安全测试、CAN一致性测试、UDS测试、ECU测试、OTA测试、TBOX测试、导航测试、车控测试

FOTA模块中OTA的知识点&#xff1a;1.测试过程中发现哪几类问题&#xff1f; 可能就是一个单键的ecu&#xff0c;比如升了一个门的ecu&#xff0c;他的升了之后就关不上&#xff0c;还有就是升级组合ecu的时候&#xff0c;c屏上不显示进度条。 2.在做ota测试的过程中&#xff…

今日指数项目个股描述功能实现

个股描述功能实现 1 个股描述功能实现说明 1&#xff09;原型示意 2&#xff09;接口说明 功能描述&#xff1a;个股主营业务查询接口 服务路径&#xff1a;/api/quot/stock/describe 服务方法&#xff1a;GET 请求参数&#xff1a;code #股票编码 响应参数&#xff1a; {…

java计算机毕设课设—坦克大战游戏

这是什么系统&#xff1f; 坦克大战游戏是一款以坦克为主题的射击游戏&#xff0c;旨在为玩家提供一个刺激、有趣的游戏体验。该游戏不仅拥有丰富的功能&#xff0c;还注重玩家的互动体验。此系统是使用Java语言实现坦克大战游戏程序&#xff0c;玩家通过连接访问进入游戏&…

C语言指针plus版练习

上期我们讲了进阶的指针&#xff0c;本期内容我们来强化一下上期学的内容 一、字符串左旋 实现一个函数&#xff0c;可以左旋字符串中的k个字符。 1.1 分析题目 假设字符串为abcde&#xff0c;左旋一个以后就变成bcdea&#xff0c;就是把第一个字符移到一个新的变量里面&#…

一、走进新语言

走进新语言 介绍环境配置JDK配置Kotlin配置 开发工具代码基本结构程序注释 介绍 Kotlin是一种现代但已经成熟的编程语言&#xff0c;旨在让开发人员更快乐。它简洁、安全、可与Java和其他语言互操作&#xff0c;并提供了许多在多个平台之间重用代码的方法。它由JetBrains公司于…

8647 实现图的存储结构

### 思路 1. 读取输入的顶点个数n和边的条数m。 2. 初始化一个n*n的邻接矩阵&#xff0c;所有元素初始为0。 3. 读取每条边的信息&#xff0c;更新邻接矩阵对应位置为1。 4. 输出邻接矩阵。 ### 伪代码 1. 读取n和m。 2. 初始化n*n的邻接矩阵matrix&#xff0c;所有元素为0。 …

DatePicker 日期控件

效果&#xff1a; 要求&#xff1a;初始显示系统当前时间&#xff0c;点击日期控件后修改文本控件时间。 目录结构&#xff1a; activity_main.xml(布局文件)代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:and…

[C++]使用纯opencv部署yolov11-pose姿态估计onnx模型

【算法介绍】 使用纯OpenCV部署YOLOv11-Pose姿态估计ONNX模型是一项具有挑战性的任务&#xff0c;因为YOLOv11通常是用PyTorch等深度学习框架实现的&#xff0c;而OpenCV本身并不直接支持加载和运行PyTorch模型。然而&#xff0c;可以通过一些间接的方法来实现这一目标&#x…

Apollo9.0 Planning2.0决策规划算法代码详细解析 (5): OnLanePlanning::Init()

&#x1f31f; 面向自动驾驶规划算法工程师的专属指南 &#x1f31f; 欢迎来到《Apollo9.0 Planning2.0决策规划算法代码详细解析》专栏&#xff01;本专栏专为自动驾驶规划算法工程师量身打造&#xff0c;旨在通过深入剖析Apollo9.0开源自动驾驶软件栈中的Planning2.0模块&am…

[Python] 编程入门:理解变量类型

文章目录 [toc] 整数常见操作 浮点数字符串字符串中混用引号问题字符串长度计算字符串拼接 布尔类型动态类型特性类型转换结语 收录专栏&#xff1a;[Python] 在编程中&#xff0c;变量是用于存储数据的容器&#xff0c;而不同的变量类型则用来存储不同种类的数据。Python 与 C…

通信工程学习:什么是RARP反向地址解析协议

RARP&#xff1a;反向地址解析协议 RARP&#xff08;Reverse Address Resolution Protocol&#xff0c;反向地址解析协议&#xff09;是一种网络协议&#xff0c;其主要作用是在设备只知道物理地址&#xff08;如MAC地址&#xff09;时&#xff0c;允许其从网关服务器的地址解析…

YOLO11改进 | 卷积模块 | 轻量化GSConv替换普通的conv

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 为什么订阅我的专栏&#xff1f; 前沿技术解读&#xff1a;专栏不仅限于YOLO系列的改进&#xff0c;还会涵盖各类主流与新兴网络的最新研究成果&#xff0c;帮助你紧跟技术潮流…

使用TM1618控制LED了解P-MOS和N-MOS的开漏输出的不同

数据手册上的截取内容 手册中推荐的共阴/阳极电路 可以发现GRID总接LED的负极&#xff0c;SEG引脚接的是LED 正极 分析输出的MOS管类型可以很好的知道原因 图片来源 通过都是开漏输出可以看出&#xff0c;引脚引出的内部电路是不同的。P-mos引出的是漏极&#xff0c;导通时…

记录使用gym和stable_baseline3训练出成功通关的贪吃蛇ai

参考自b站up林亦LYi的开源项目 传送门 本次只训练了cnn版本的 第一次接触这种项目&#xff0c;建python虚拟环境时出了点难以说清楚的小问题&#xff0c;安装不上requirement.txt中的gym库那个版本&#xff0c;折腾了一会&#xff0c;自己都乱了头绪&#xff0c;最后导致训练…

FL Studio 24.1.2.4381中文版免费下载及FL Studio 24最新使用学习教程

家好呀&#xff0c;作为一个资深的音乐爱好者和制作人&#xff0c;今天我要安利一个我最近超级痴迷的数字音频工作站软件——FL Studio24.1.2.4381中文版。这款产品可是让我的音乐创作之路如虎添翼&#xff0c;快来跟我一起看看它的炫酷功能吧&#xff01; 最近接到很多小伙伴的…

【小记】2024/10/4

1. GMT中颜色设置 使用pygmt时&#xff0c;颜色设置应该使用全称&#xff0c;简称时会出现错误&#xff0c;这与我们的习惯有所区别。 2. ENVI学习 3、投影坐标

高级图片编辑器Photopea

什么是 Photopea &#xff1f; Photopea 是一款免费的在线工具&#xff0c;用于编辑光栅和矢量图形&#xff0c;支持PSD、AI 和 Sketch文件。 功能上&#xff0c;Photopea 和 老苏之前介绍的 miniPaint 比较像 文章传送门&#xff1a;在线图片编辑器miniPaint 支持的格式 复杂…

【可视化大屏】中间部分的数字和地图

中间部分分为上面数字部分和下面地图两大部分 上面的数字又分为上面数字下面文字&#xff0c;数字部分是ul中包含两个li&#xff0c;采用flex布局&#xff0c;使两个li在同一行 <!-- 中间部分 --><div class"column"><div class"no">&l…

【第三版 系统集成项目管理工程师】第15章 组织保障

持续更新。。。。。。。。。。。。。。。 【第三版】第十五章 组织保障 15.1信息和文档管理15.1.1 信息和文档1.信息系统信息-P5462.信息系统文档-P546 15.1.2 信息(文档)管理规则和方法1.信息(文档)编制规范-P5472.信息(文档)定级保护-P5483.信息(文档)配置管理-P549练习 15.…

etcd 快速入门

简介 随着go与kubernetes的大热&#xff0c;etcd作为一个基于go编写的分布式键值存储&#xff0c;逐渐为开发者所熟知&#xff0c;尤其是其还作为kubernetes的数据存储仓库&#xff0c;更是引起广泛专注。 本文我们就来聊一聊etcd到底是什么及其工作机制。 首先&#xff0c;…