数据结构_图的遍历

news2024/11/22 0:51:20

深度优先搜索遍历

遍历思想

在这里插入图片描述

邻接矩阵上的遍历算法

在这里插入图片描述
在这里插入图片描述

void Map::DFSTraverse()
{
    int i, v;
    for (i = 0; i < MaxLen; i++)
    {
        visited[i] = false;
    }
    for (i = 0; i < Vexnum; i++)
    {
        // 如果顶点未访问,则进行深度优先搜索
        if (visited[i] == false)
        {
            DFS(i);
        }
    }
    cout << endl;
}

// 从第v个顶点出发递归地深度优先遍历图G
void Map::DFS(int v)
{
    int w, i, k;
    visited[v] = true; // 标记已访问
    cout << v << " ";

    // 找出与v相连接的其他所有顶点,存放在AdjVex数组中
    int* AdjVex = new int[Vexnum]; // 存放连接的顶点编号
    for (i = 0; i < Vexnum; i++)
    {
        AdjVex[i] = -1;
    }

    // k是数组AdjVex的空位置下标,初始化为0表示数组AdjVex一开始没有数据
    k = 0;
    for (i = 0; i < Vexnum; i++)
    {
        // 如果顶点i与v连接
        if (Maxtrix[v][i] == 1)
        {
            AdjVex[k] = i;
            k++;
        }
    }

    i = 0;
    w = AdjVex[i];
    while (w != -1)
    {
        // 如果顶点w未访问
        if (visited[w] == false)
        {
            DFS(w);
        }
        i++;
        w = AdjVex[i];
    }
    delete[] AdjVex;
}

广度优先搜索遍历及其实现

在这里插入图片描述

实现

在这里插入图片描述
在这里插入图片描述

void Map::BFS(Graph G, int v)
{
    int w, u;
    queue<int> Q;
    visited[v] = true; // 访问第v个顶点
    cout << v << " ";  // 输出访问的顶点

    Q.push(v);
    while (!Q.empty())
    {
        u = Q.front();
        Q.pop();
        for (w = FirstAdjVex(G, u); w >= 0; w = NextAdjVex(G, u, w))
        {
            if (!visited[w])
            {
                cout << w << " ";
                visited[w] = true;
                Q.push(w);
            }
        }
    }
}
int Map::FirstAdjVex(Graph& G, int v)
{
    for (int i = 0; i < G.num; i++)
    {
        if (G.arcs[v][i] != 0)
        {
            return i;
        }
    }
    return -1;
}

int Map::NextAdjVex(Graph& G, int v, int w)
{
    for (int i = w + 1; i < G.num; i++)
    {
        if (G.arcs[v][i] != 0)
            return i;
    }
    return -1;
}

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

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

相关文章

MySQL时间字段TIMESTAMP和DATETIME

SELECT global.time_zone, session.time_zone;查询数据库的全局时区和当前会话的时区信息&#xff0c;一般如果使用navicat进行连接&#xff0c;没有显示指定时区信息&#xff0c;会默认使用system_time_zone。 可以使用 SET time_zone 08:00; SELECT global.time_zone, sess…

AQS 理解 及不可重入锁实现

由于目前水平有限&#xff0c;只是写出作者目前对 aqs的简单理解&#xff0c;有错误还请评论指证 AQS是什么 Aqs是java.util.concurrent 包下的一个抽象队列 同步器类&#xff0c;被简写为英文AQS&#xff0c; 我认为 可以把他理解 为一个 实现 自定义 锁的 一个具体的框架 …

nginx源码安装配置ssl域名

nginx源码安装 下载 wget http://nginx.org/download/nginx-1.24.0.tar.gz 解压 tar -zxvf nginx-1.24.0.tar.gz 下载openssl apt install openssl 安装nginx cd nginx-1.24.0 sudo apt-get install libpcre3 libpcre3-dev ./configure --prefix=/home/nginx24 --with-http_ss…

【笔记】Android Gradle Plugin配置文件相关说明-libs.versions.toml

版本号 文件路径&#xff1a;Project\gradle\libs.versions.toml 直接搜索versions.agp是找不到的&#xff0c;这是变量引用的写法&#xff0c;查询 agp版本可以直接查版本号。 [versions] agp "8.5.0-alpha08" junit "4.13.2" junitVersion "1.…

支付宝租赁小程序的优势与应用前景分析

内容概要 在这个快节奏的时代&#xff0c;租赁服务越来越成为大家生活中的一部分。而支付宝租赁小程序正是这个大潮流中的一颗璀璨明珠。通过简单易用的界面和强大的功能&#xff0c;这个小程序不仅让用户在租赁过程中获得了前所未有的便利&#xff0c;也为商家提供了新的商业…

三十一、构建完善微服务——API 网关

一、API 网关基础 系统拆分为微服务后&#xff0c;内部的微服务之间是互联互通的&#xff0c;相互之间的访问都是点对点的。如果外部系统想调用系统的某个功能&#xff0c;也采取点对点的方式&#xff0c;则外部系统会非常“头大”。因为在外部系统看来&#xff0c;它不需要也没…

深入理解 Redis跳跃表 Skip List 原理|图解查询、插入

1. 简介 跳跃表 ( skip list ) 是一种有序数据结构&#xff0c;通过在每个节点中维持多个指向其他节点的指针&#xff0c;从而达到快速访问节点的目的。 在 Redis 中&#xff0c;跳跃表是有序集合键的底层实现之一&#xff0c;那么这篇文章我们就来讲讲跳跃表的实现原理。 2. …

MediaSession学习总结

1.框架预览 2.用法 2.1参考链接&#xff1a; MediaSession 简单使用 2.2 服务端要实现MediaBrowserService&#xff1b; 主要实现的功能&#xff1a; mPlaybackState new PlaybackStateCompat.Builder().setState(PlaybackStateCompat.STATE_NONE, currentPostion, 1.0f).…

学习大数据DAY61 宽表加工

目录 模型设计 加工宽表 任务调度&#xff1a; 大表 - 把很多数据整合起来 方便后续的明细查询和指标计算 模型设计 设计 建模 设计: excel 文档去编写 建模: 使用建模工具 PowerDesigner Navicat 在线画图工具... 把表结构给绘 制出来 共享\项目课工具\pd 加工宽表 数…

零基础入门Flink,掌握基本使用方法

Flink基本概念 首先来讲&#xff0c;Flink是一个面向数据流处理和批处理的分布式开源计算框架。 那么&#xff0c;流处理和批处理分别处理什么样的数据呢&#xff0c;这就涉及两个概念-无界流和有界流 无界流VS有界流 任何类型的数据都可以形成流数据&#xff0c;比如用户…

Linux设置以及软件的安装(hadoop集群安装02)

一、Linux的常见设置 1、设置静态IP vi /etc/sysconfig/network-scripts/ifcfg-ens33 如何查看自己的虚拟机的网关&#xff1a; 完整的配置&#xff08;不要拷贝我的&#xff09;&#xff1a; TYPE"Ethernet" PROXY_METHOD"none" BROWSER_ONLY"no&…

数据中台方法论:数据汇聚

文章目录 一、数据汇聚概述二、 汇聚数据类型2.1 结构化数据2.2 半结构化数据2.3 非结构化数据 三、汇聚数据模式四、汇聚数据方法四、数据汇聚工具五、数据汇聚使用经验 数据小伙伴们&#xff0c;之前咱们长篇大论的聊聊过【数据中台建设方法论从0到1】&#xff0c;从数据中台…

【Maven】nexus 配置私有仓库配置【转】

介绍&#xff1a;【Maven】Nexus几个仓库的介绍-CSDN博客 一、仓库类型 proxy 远程仓库的代理&#xff0c;比如说nexus配置了一个central repository的proxy,当用户向这个proxy请求一个artifact的时候&#xff0c;会现在本地查找&#xff0c;如果找不到&#xff0c;则会从远程…

3C产品说明书电子化转变:用户体验、环保与商业机遇的共赢

在科技日新月异的当代社会&#xff0c;3C产品&#xff08;涵盖计算机类、通信类和消费类电子产品&#xff09;已成为我们日常生活中不可或缺的重要元素。与此同时&#xff0c;这些产品的配套说明书也经历了一场从纸质到电子化的深刻变革。这一转变不仅体现了技术的飞速进步&…

【YOLOv8】安卓端部署-2-项目实战

文章目录 1 准备Android项目文件1.1 解压文件1.2 放置ncnn模型文件1.3 放置ncnn和opencv的android文件1.4 修改CMakeLists.txt文件 2 手机连接电脑并编译软件2.1 编译软件2.2 更新配置及布局2.3 编译2.4 连接手机 3 自己数据集训练模型的部署4 参考 1 准备Android项目文件 1.1…

虚拟网卡驱动和DM9000C移植

网卡驱动程序框架 网卡驱动程序“收发功能”&#xff1a; 只要把上层的数据发给网卡&#xff0c;从网卡来的数据构造成包给上层即可。网卡只需要 “socket”编程&#xff0c;不需要打开某设备。 驱动程序都是以面向对象的思想写的&#xff0c;都有相关的结构体。 编程步骤 …

Vue3 + Vite 项目引入 Typescript

文章目录 一、TypeScript简介二、TypeScript 开发环境搭建三、编译方式1. 自动编译单个文件2. 自动编译整个项目 四、配置文件1. compilerOptions基本选项严格模式相关选项&#xff08;启用 strict 后自动包含这些&#xff09;模块与导入相关选项 2. include 和 excludeinclude…

Cyberchef使用功能之-多种压缩/解压缩操作对比

cyberchef的compression操作大类中有大量的压缩和解压缩操作&#xff0c;每种操作的功能和区别是什么&#xff0c;本章将进行讲解&#xff0c;作为我的专栏《Cyberchef 从入门到精通教程》中的一篇&#xff0c;详见这里。 关于文件格式和压缩算法的理论部分在之前的文章《压缩…

Istio分布式链路监控搭建:Jaeger与Zipkin

分布式追踪定义 分布式追踪是一种用来跟踪分布式系统中请求的方法&#xff0c;它可以帮助用户更好地理解、控制和优化分布式系统。分布式追踪中用到了两个概念&#xff1a;TraceID 和 SpanID。 TraceID 是一个全局唯一的 ID&#xff0c;用来标识一个请求的追踪信息。一个请求…

Linux修改/etc/hosts不起作用(ping: xxx: Name or service not known)的解决方法——开启NSCD

​ 问题描述 起因是我在实验室云资源池的一台虚拟机&#xff08;CentOS 8.5&#xff09;上的/etc/hosts文件中为Fabric网络节点的域名指定了IP&#xff1a; IP可以ping通&#xff0c;但是ping域名时提示ping: xxx: Name or service not known。 问题本身应该是Linux通用的&a…