【408考点之数据结构】图的遍历

图的遍历

图的遍历是指从图中的某个顶点出发,按照一定的规则访问图中所有顶点,并使每个顶点仅被访问一次。图的遍历包括两种主要方法:深度优先搜索(DFS)和广度优先搜索(BFS)。这两种遍历方法在算法设计、路径搜索、网络分析等方面有广泛的应用。

深度优先搜索(DFS)

深度优先搜索类似于树的先序遍历,采用递归或栈的方式实现。DFS 从一个起始顶点开始,访问一个顶点后,继续访问它的未访问过的邻接顶点,直到所有邻接顶点都被访问过为止,然后回溯到上一个顶点,继续这一过程,直到所有顶点都被访问过为止。

实现步骤

  1. 访问起始顶点,并标记为已访问。
  2. 从该顶点出发,依次访问每个未被访问的邻接顶点,重复步骤 1。
  3. 若当前顶点的所有邻接顶点都被访问过,则回溯到上一个顶点,继续访问其他未被访问的邻接顶点。
  4. 重复以上步骤,直到所有顶点都被访问过。

代码实现

#include <stdio.h>
#include <stdlib.h>

#define MAXVEX 100

typedef struct EdgeNode {
    int adjvex;
    struct EdgeNode *next;
} EdgeNode;

typedef struct VertexNode {
    int data;
    EdgeNode *firstEdge;
} VertexNode, AdjList[MAXVEX];

typedef struct {
    AdjList adjList;
    int numVertexes, numEdges;
} GraphAdjList;

void DFS(GraphAdjList *G, int i, int *visited) {
    EdgeNode *p;
    visited[i] = 1;
    printf("%d ", G->adjList[i].data);
    p = G->adjList[i].firstEdge;
    while (p) {
        if (!visited[p->adjvex]) {
            DFS(G, p->adjvex, visited);
        }
        p = p->next;
    }
}

void DFSTraverse(GraphAdjList *G) {
    int visited[MAXVEX];
    for (int i = 0; i < G->numVertexes; i++) {
        visited[i] = 0;
    }
    for (int i = 0; i < G->numVertexes; i++) {
        if (!visited[i]) {
            DFS(G, i, visited);
        }
    }
}
广度优先搜索(BFS)

广度优先搜索类似于树的层次遍历,采用队列的方式实现。BFS 从一个起始顶点开始,访问一个顶点后,将其所有未被访问的邻接顶点依次入队,访问完当前顶点后,出队下一个顶点,继续这一过程,直到所有顶点都被访问过为止。

实现步骤

  1. 访问起始顶点,并标记为已访问,将该顶点入队。
  2. 当队列不为空时,出队一个顶点,访问它的所有未被访问的邻接顶点,并将这些邻接顶点依次入队。
  3. 重复步骤 2,直到队列为空。

代码实现

#include <stdio.h>
#include <stdlib.h>

#define MAXVEX 100

typedef struct EdgeNode {
    int adjvex;
    struct EdgeNode *next;
} EdgeNode;

typedef struct VertexNode {
    int data;
    EdgeNode *firstEdge;
} VertexNode, AdjList[MAXVEX];

typedef struct {
    AdjList adjList;
    int numVertexes, numEdges;
} GraphAdjList;

void BFS(GraphAdjList *G, int i, int *visited) {
    EdgeNode *p;
    int queue[MAXVEX];
    int front = 0, rear = 0;

    printf("%d ", G->adjList[i].data);
    visited[i] = 1;
    queue[rear++] = i;

    while (front != rear) {
        i = queue[front++];
        p = G->adjList[i].firstEdge;
        while (p) {
            if (!visited[p->adjvex]) {
                printf("%d ", G->adjList[p->adjvex].data);
                visited[p->adjvex] = 1;
                queue[rear++] = p->adjvex;
            }
            p = p->next;
        }
    }
}

void BFSTraverse(GraphAdjList *G) {
    int visited[MAXVEX];
    for (int i = 0; i < G->numVertexes; i++) {
        visited[i] = 0;
    }
    for (int i = 0; i < G->numVertexes; i++) {
        if (!visited[i]) {
            BFS(G, i, visited);
        }
    }
}
使用场景
  1. 网络爬虫:通过图的遍历算法,可以从一个网页开始,逐步访问所有相关网页。
  2. 社交网络分析:通过图的遍历算法,可以找出社交网络中各个用户之间的关系。
  3. 路径搜索:在地图应用中,通过图的遍历算法可以找到从一个地点到另一个地点的路径。
  4. 电路分析:在电路设计中,通过图的遍历算法可以分析电路中各个元件之间的连接关系。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

要不要从单片机转Linux?进来看看大神怎么说

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;究竟要不要从单片机转Linu…

对象的引用和常引用

前面曾介绍&#xff1a;一个变量的引用就是变量的别名。实际上&#xff0c;引用是一个指针常量&#xff0c;用来存放该变量的地址。如果形参为变量的引用&#xff0c;实参为变量名&#xff0c;则在调用函数进行虚实结合时&#xff0c;把实参变量的地址传给形参&#xff08;引用…

2024 年江西省研究生数学建模竞赛题目 B题投标中的竞争策略问题---完整文章分享(仅供学习)

问题&#xff1a; 招投标问题是企业运营过程中必须面对的基本问题之一。现有的招投标平台有国家级的&#xff0c;也有地方性的。在招投标过程中&#xff0c;企业需要全面了解招标公告中的相关信息&#xff0c;在遵守招投标各种规范和制度的基础上&#xff0c;选择有效的竞争策…

工业交换机端口统计功能

工业交换机端口统计功能不仅是一项技术手段&#xff0c;更是一双透视企业网络健康状态的慧眼。通过这一功能&#xff0c;企业能够实时捕捉到网络中每一个端口的流量情况&#xff0c;这不仅仅是数据的积累&#xff0c;更是对网络脉搏的精准把握。当网络的每一个脉动都被记录在案…

【每日一练】Python遍历循环

1. 情节描述&#xff1a;上公交车(10个座位)&#xff0c;并且有座位就可以坐下 要求&#xff1a;输入公交卡当前的余额&#xff0c;只要超过2元&#xff0c;就可以上公交车&#xff1b;如果车上有空座位&#xff0c;才可以上。 seat 10 while seat > 0:money int(input(…

springboot个人证书管理系统-计算机毕业设计源码16679

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了个人证书管理系统的开发全过程。通过分析个人证书管理系统管理的不足&#xff0c;创建了一个计算机管理个人证书管理系统的方案。文章介绍了个人证书管理系统的系…

计算机组成原理 | CPU子系统(4)MIPS32架构-单周期处理器设计

R型运算指令通路 I型运算指令通路 I型访存指令数据通路 I型分支 J型j指令 重新布局 继续整合通路&#xff1a;MUX多路选择器 控制方式 硬连接控制方式&#xff1a;依靠电路 微命令控制&#xff1a;将指令转换为微命令 控制信号的整理和编码 控制系统的两级控制方案 ALU控制器&…

大模型时代的基础架构,大模型算力中心建设指南重磅来袭!

什么是最畅销商品&#xff1f;什么是高毛利商品&#xff1f; 我们来看一个例子&#xff1a; 一件T恤使用成本为100元的原料&#xff0c;价格为140元。另一件T恤使用成本为80元的原料&#xff0c;但在样式、颜色、图案的设计上比较有特色&#xff0c;价格也为140元。 当这两件…

【BES2500x系列 -- RTX5操作系统】深入探索CMSIS-RTOS RTX -- 同步与通信篇 -- 消息队列和邮箱处理 --(四)

&#x1f48c; 所属专栏&#xff1a;【BES2500x系列】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f49…

面向航天器大数据安全传输的发布/订阅系统设计

源自&#xff1a;系统工程与电子技术 作者&#xff1a;覃润楠 彭晓东 谢文明 惠建江 冯渭春 姜加红 注&#xff1a;若出现无法显示完全的情况&#xff0c;可 V 搜索“人工智能技术与咨询”查看完整文章 摘 要 针对航天器试验任务过程监控的在轨故障诊断状态检测、健…

5款简洁干净,功能强悍,专注实用的软件

​ 电脑上的各类软件有很多&#xff0c;除了那些常见的大众化软件&#xff0c;还有很多不为人知的小众软件&#xff0c;专注于实用功能&#xff0c;简洁干净、功能强悍。 1.音量控制利器——EarTrumpet ​ EarTrumpet是一款专为Windows用户设计的音量控制软件。它允许用户轻松…

等保测评应该选择什么样的SSL证书

选择适合等保测评的SSL证书&#xff0c;需考虑证书的加密强度、认证机制以及是否满足国家相关的密码技术要求 1、证书类型&#xff1a;应选择符合国家或行业标准的SSL证书&#xff0c;这些证书通常采用RSA、DSA或ECC等国际认可的加密算法。同时&#xff0c;考虑到国内特定的合规…

【C语言】常见的字符串函数

©作者:末央&#xff06; ©系列:C语言初阶(适合小白入门) ©说明:以凡人之笔墨&#xff0c;书写未来之大梦 目录 strlen函数模拟实现 strstr子串查找函数模拟实现 strtok字符串分割 strlen函数 strlen函数是一个用于求字符串长度的库函数。它的参数是被求长度的字…

免费分享:2000-2021年全国分省250mNDVI数据集(附下载方法)

NDVI (Normalized Difference Vegetation Index)归一化植被指数&#xff0c;又称标准化植被指数。是目前应用最广泛的植被指数&#xff0c;与植被的分布呈线性相关&#xff0c;是植被生长状态和空间分布的最佳指示因子&#xff0c;也是遥感估算植被覆盖度(FVC&#xff0c;Fract…

VMware Workstation 安装 Centos 虚拟机

1. 下载 VMware Workstation 直接上网找官网下载即可 2. 下载 Centos 镜像 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 3.打开 VMware 创建虚拟机 3.1点击创建虚拟机 3.2 选择自定义安装 3.3 选择使用 Workstation 的版本 版本越高兼容性越低但性能越好&#xff0c;一…

APP性能测试

1、性能测试分类&#xff1a;&#xff08;CPU&#xff0c;内存&#xff0c;流量&#xff0c;时间&#xff08;启动耗时计算&#xff09;&#xff0c;电量&#xff0c;流畅度&#xff08;帧率&#xff09;&#xff09;&#xff0c;稳定性&#xff08;崩溃&#xff0c;闪退&#…

[数据库原理]数据库设计(er图)

xtu期末是机试&#xff0c;所以图形表示有点不同 实体之间的关系&#xff1a; 多对多&#xff1a;可以生成一个新的关系模型一对一&#xff1a;两边都要关联一对多、多对一 &#xff1a;一的主键可以作为多的外键 如有错误&#xff0c;欢迎指正&#xff01;&#xff01;&#x…

年轻人「入侵」厂货电商:泼天的富贵or甜蜜的烦恼?

【潮汐商业评论/原创】 “明天我们带个黑色塑料袋&#xff0c;假装是批发拿货的&#xff0c;看看能不能淘到好货。这个批发‘黑话’你也学一下&#xff0c;别到时候露馅。” Paula正兴冲冲地跟Grace计划去服装批发市场“消费”。 只不过&#xff0c;与以往普通进店客人身份不…

瀚高数据库2024最新版_6.0.4_Windows版安装使用---国产瀚高数据库工作笔记007

首先去下载安装包: 下载的是企业版,可以试用一年 首先安装的时候,直接,下一步下一步就可以了 注意要用administrator去安装. 下载以后一步步去安装就可以了 ,桌面上会出现 但是连接不上,并且, 如果从管理工具中,找到服务 cmd services.msc 打开以后,找到瀚高服务,但是…

C# 验证PDF数字签名的有效性

数字签名作为PDF文档中的重要安全机制&#xff0c;不仅能够验证文件的来源&#xff0c;还能确保文件内容在传输过程中未被篡改。然而&#xff0c;如何正确验证PDF文件的数字签名&#xff0c;是确保文件完整性和可信度的关键。本文将详细介绍如何使用免费.NET控件通过C#验证PDF签…