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

邻接矩阵储存图实现深度优先遍历(C++)

     

目录

基本要求:

图的结构体:

图的构造:

图的深度优先(DFS):

图的打印输出:

完整代码:

测试数据:

 运行结果:

     通过给出的图的顶点和边的信息,构建无向图的邻接矩阵存储结构。在此基础上,从A顶点开始,对无向图进行深度优先遍历,输出遍历序列。

基本要求:

(1)从测试数据读入顶点和边信息,建立无向图邻接矩阵存储结构;

(2)把构建好的矩阵输入显示;

(3)从A顶点开始,编写DFS深度优先遍历算法;

(4)输出深度优先遍历序列。

图的结构体:

typedef char Vertextype;//顶点数据类型
typedef int Arctype;//边权值类型
typedef struct
{Vertextype vexs[mvnum];//顶点表Arctype arcs[mvnum][mvnum];//邻接矩阵int vexnum, arcnum;//当前图的点数和边数
}AMGraph;

图的构造:

bool Creategraph(AMGraph& G)
{cin >> G.vexnum >> G.arcnum;//输入总顶点数,总边数for (int i = 0; i < G.vexnum; i++){cin >> G.vexs[i];//依次输入点的信息mp[G.vexs[i]]=0;//辅助数组,是否访问过该点,0表示没访问过}for (int i = 0; i < G.vexnum; i++)//初始化邻接矩阵for (int j = 0; j < G.vexnum; j++)G.arcs[i][j] = 0;for (int k = 0; k < G.arcnum; k++)//构造邻接矩阵{Vertextype v1, v2;int w;cin >> v1 >> v2;//输入一条边的顶点及边的权值int i = Locatevex(G, v1);int j = Locatevex(G, v2);//确定v1和v2在G中的位置G.arcs[i][j] = 1;//边<v1,v2>的权值置为wG.arcs[j][i] = G.arcs[i][j];//无向图是对称图}return 1;
}

图的深度优先(DFS):

void DFS(AMGraph& G,Vertextype v)
{cout << v<<" ";mp[v] = 1;for (int i = 0; i < G.vexnum; i++){int a = Locatevex(G, v);if (v == G.vexs[i])continue;else{if (G.arcs[a][i] == 1 && !mp[G.vexs[i]])//是邻边且没访问过DFS(G, G.vexs[i]);}}
}

图的打印输出:

void Print(AMGraph G)
{cout << "邻接矩阵:" << endl;for (int i = 0; i < G.vexnum; i++){for (int j = 0; j < G.vexnum; j++)cout << G.arcs[i][j] << " ";cout << endl;}
}

完整代码:

#include<iostream>//无向图邻接矩阵
#include<map>
#define mvnum 100
using namespace std;
typedef char Vertextype;//顶点数据类型
typedef int Arctype;//边权值类型
map<Vertextype, int> mp;
typedef struct
{Vertextype vexs[mvnum];//顶点表Arctype arcs[mvnum][mvnum];//邻接矩阵int vexnum, arcnum;//当前图的点数和边数
}AMGraph;
int Locatevex(AMGraph G, Vertextype u)//在G图中查找顶点u,存在则返回顶点表中的下标,否则返回-1
{for (int i = 0; i < G.vexnum; i++)if (u == G.vexs[i]) return i;return -1;
}
bool Creategraph(AMGraph& G)
{cin >> G.vexnum >> G.arcnum;//输入总顶点数,总边数for (int i = 0; i < G.vexnum; i++){cin >> G.vexs[i];//依次输入点的信息mp[G.vexs[i]]=0;//辅助数组,是否访问过该点,0表示没访问过}for (int i = 0; i < G.vexnum; i++)//初始化邻接矩阵for (int j = 0; j < G.vexnum; j++)G.arcs[i][j] = 0;for (int k = 0; k < G.arcnum; k++)//构造邻接矩阵{Vertextype v1, v2;int w;cin >> v1 >> v2;//输入一条边的顶点及边的权值int i = Locatevex(G, v1);int j = Locatevex(G, v2);//确定v1和v2在G中的位置G.arcs[i][j] = 1;//边<v1,v2>的权值置为wG.arcs[j][i] = G.arcs[i][j];//无向图是对称图}return 1;
}
void DFS(AMGraph& G,Vertextype v)
{cout << v<<" ";mp[v] = 1;for (int i = 0; i < G.vexnum; i++){int a = Locatevex(G, v);if (v == G.vexs[i])continue;else{if (G.arcs[a][i] == 1 && !mp[G.vexs[i]])//是邻边且没访问过DFS(G, G.vexs[i]);}}
}
void Print(AMGraph G)
{cout << "邻接矩阵:" << endl;for (int i = 0; i < G.vexnum; i++){for (int j = 0; j < G.vexnum; j++)cout << G.arcs[i][j] << " ";cout << endl;}
}
int main()
{AMGraph G;Creategraph(G);Print(G);cout << "DFS序列:";DFS(G, 'A');//从A开始遍历
}

测试数据:

12 16

A B C D E F G H I J K L

A D

B C

B D

B F

C F

D G

E B

E F

E G

E H

F I

G K

H I

I K

J K

K L

测试数据说明:

1.第一行两个整数分别表示无向图中的顶点数m和边数n;

2.第二行中的m个整数,表示m个顶点数据元素(数据类型为字符型;

3.从第三行开始连续n行数据,每一行两个字符表示无向图中的一条边关联的两个顶点数据信息。

4.无向图如下图示:

 运行结果:

相关文章:

邻接矩阵储存图实现深度优先遍历(C++)

目录 基本要求&#xff1a; 图的结构体&#xff1a; 图的构造&#xff1a; 图的深度优先&#xff08;DFS&#xff09;&#xff1a; 图的打印输出&#xff1a; 完整代码&#xff1a; 测试数据&#xff1a; 运行结果&#xff1a; 通过给出的图的顶点和边的信息&#xff0c…...

hdlbits系列verilog解答(100位加法器)-42

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 通过实例化 100 个完整加法器来创建一个 100 位二进制纹波进位加法器。加法器将两个 100 位数字和一个进位相加,以产生一个 100 位的总和并执行。为了鼓励您实际实例化全加法器,还要在纹波进位加法器中输出每…...

学者观察 | 数字经济中长期发展中的区块链影响力——清华大学柴跃廷

导语 区块链是一种全新的分布式基础架构与计算范式&#xff0c;既能利用非对称加密和冗余分布存储实现信息不可篡改&#xff0c;又可以利用链式数据结构实现数据信息可溯源。当前&#xff0c;区块链技术已成为全球数据交易、金融结算、国际贸易、政务民生等领域的信息基础设施…...

python-flask笔记

服务器图形工具&#xff1a;FinalShellpython虚拟环境用anaconda 标题技术架构和依赖 python3.8 环境 Flask 后端框架 flask-marshmallow webargs 处理参数接收 postgresql 数据库 psycopg2-binary postgresql操作库 Flask-SQLAlchemy orm操作库 flask-admin 超管管理后台 …...

tensor和ndarray的相互转换,同时需要注意cuda和cpu的迁移

从tensor到ndarray&#xff1a;.detach() 方法用于创建一个新的张量&#xff0c;新张量与原始张量共享数据内存&#xff0c;但是不会被计算图追踪。这意味着在新张量上的操作不会影响到原始张量&#xff0c;同时也可以避免梯度传播&#xff0c;适合于提取中间结果。 # 当tenso…...

《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》阅读笔记

论文标题 《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》 Swin 这个词貌似来自后面的 Shifted WindowsShifted Windows&#xff1a;移动窗口Hierarchical&#xff1a;分层 作者 微软亚洲研究院出品 初读 摘要 提出 Swin Transformer 可以…...

Flink 基础 -- 应用开发(Table API SQL) 概念和通用API

1、概述 Apache Flink提供了两个关系API——Table API和SQL——用于统一的流和批处理。Table API是一个用于Java、Scala和Python的语言集成查询API&#xff0c;它允许以非常直观的方式组合来自关系操作符(如选择、过滤和连接)的查询。Flink的SQL支持基于Apache Calcite&#x…...

Flink之Java Table API的使用

Java Table API的使用 使用Java Table API开发添加依赖创建表环境创建表查询表输出表使用示例 表和流的转换流DataStream转换成表Table表Table转换成流DataStream示例数据类型 自定义函数UDF标量函数表函数聚合函数表聚合函数 API方法汇总基本方法列操作聚合操作Joins合并操作排…...

【Unity细节】Unity中如何让组件失活而不是物体失活

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 &#x1f636;‍&#x1f32b;️收录于专栏&#xff1a;unity细节和bug &#x1f636;‍&#x1f32b;️优质专栏 ⭐【…...

[设计模式] 建造者模式

一、引言 起因是学习okhttp过程中遇到的这段代码 Request request original.newBuilder().url(original.url()).header("Authorization", "Bearer " BearerTokenUtils.getToken(configuration.getApiKey(), configuration.getApiSecret())).header(&quo…...

在DDD领域驱动下的微服务数据库的MVC设计思路(高度可行性)

在DDD领域驱动下的微服务架构中使用MVC设计思路来设计数据库是可行的&#xff0c;因为MVC是一种经典的软件架构模式&#xff0c;可以将应用程序分为三个主要部分&#xff1a;模型、视图和控制器。在微服务架构中&#xff0c;每个微服务可以看作是一个模块&#xff0c;可以使用M…...

Leetcode2834. 找出美丽数组的最小和

Every day a Leetcode 题目来源&#xff1a;2834. 找出美丽数组的最小和 解法1&#xff1a;贪心 从最小正整数 1 开始枚举&#xff0c;设当前数为 num&#xff0c;如果 nums 里没有 target - num&#xff0c;就说明可以添加 num&#xff0c;依次填满直到有 n 个数即可。 用…...

acwing算法基础之搜索与图论--kruskal算法

目录 1 基础知识2 模板3 工程化 1 基础知识 kruskal算法的关键步骤为&#xff1a; 将所有边按照权重从小到大排序。定义集合S&#xff0c;表示生成树。枚举每条边(a,b,c)&#xff0c;起点a&#xff0c;终点b&#xff0c;边长c。如果结点a和结点b不连通&#xff08;用并查集来…...

微信H5跳转微信小程序

官方文档&#xff1a;目录 | 微信开放文档 方法一&#xff1a;微信浏览器打开的h5跳转方式 HTML代码 <wx-open-launch-weapp id"launch-btn" username"所需跳转的小程序原始id" path"pages/pay/pay"><script type"text/wxtag…...

Yii2 引入 外部无命名空间的类,Class not found

记一次问题解决 问题描述 支付宝开放平台SDK v2 无命名空间。需 require 引入。 require Yii::$app->vendorPath."/alipay-sdk-php/v2/aop/AopClient.php"; var_dump(new AopClient([]));exit();上述写法会直接报错。 Class temporary\controllers\AopClient …...

设计模式是测试模式咩?

设计模式和测试模式概述 软件的生命周期为什么要进行测试&#xff08;测试的目的&#xff09;&#xff1f;软件的设计模式1. **瀑布模型**3. 增量和迭代模型4. 敏捷模型5. 喷泉模型 测试模型V模型W模型 一个应用程序从出生到“死亡”会经过非常漫长的流程…… 软件的生命周期 …...

Aspose.OCR for .NET 2023Crack

Aspose.OCR for .NET 2023Crack 为.NET在图片上播放OCR使所有用户和程序员都可以从特定的图像片段中提取文本和相关的细节&#xff0c;如字体、设计以及书写位置。这一特定属性为OCR的性能及其在扫描遵循排列的记录时的功能提供了动力。OCR的库使用一条线甚至几条线来处理这些特…...

conda环境中pytorch1.2.0版本安装包安装一直失败解决办法!!!

conda环境中pytorch1.2.0版本安装包安装一直失败解决办法 cuda10.0以及cudnn7.4现在以及安装完成&#xff0c;就差torch的安装了&#xff0c;现在torch我要装的是1.2.0版本的&#xff0c;安装包以及下载好了&#xff0c;安装包都是在这个网站里下载的&#xff08;点此进入&…...

后端面试问题(学习版)

JAVA相关 JAVA语言概述 1. 一个".java"源文件中是否可以包含多个类&#xff1f;有什么限制&#xff1f; 可以。 一个源文件可以声明多个类&#xff0c;但是最多只能有一个类使用public进行声明 且要求声明public的类的类名与源文件相同。 2. Java的优势&#xff…...

数据管理系统-week1-介绍

文章目录 一、数据它是什么&#xff1f;二、电子存储设备三、持久存储设备1、硬盘驱动器&#xff08;HDD&#xff09;、硬盘、硬盘驱动器是一种用于存储和检索数字信息的机电持久存储设备。2、固态硬盘&#xff08;SSD&#xff09;使用非易失性存储器&#xff0c;即使用NAND闪存…...

从医学影像到自动驾驶:Grad-CAM如何成为AI模型‘合规’与‘可信’的敲门砖?

Grad-CAM&#xff1a;撬动AI可信革命的视觉解释引擎 当一位放射科医生面对AI系统标注的肺部CT影像时&#xff0c;他真正需要的不只是一个"疑似恶性肿瘤"的结论&#xff0c;而是想知道&#xff1a;这个判断究竟基于病灶的哪些特征&#xff1f;同样&#xff0c;当自动驾…...

Oracle APEX工作流状态变更

Oracle APEX工作流状态变更工作流TESTWorkflow当前状态是In Development&#xff0c;如何设置为Activate要将工作流 TESTWorkflow 从 In Development 状态设置为 Active&#xff0c;你必须先解决系统报错提示的“缺少所有者&#xff08;Owner&#xff09;”问题。在 Oracle APE…...

告别混乱!用嘉立创EDA个人/团队库,高效管理你的STM32项目原理图符号

告别混乱&#xff01;用嘉立创EDA个人/团队库&#xff0c;高效管理你的STM32项目原理图符号 在硬件开发领域&#xff0c;一个精心设计的原理图符号库就像建筑师的标准化图纸——它不仅能显著提升设计效率&#xff0c;还能从根本上避免因符号混乱导致的沟通成本和设计错误。对于…...

C 语言从 0 入门(二十二)|内存四区:栈、堆、全局、常量区深度解析

大家好&#xff0c;我是网域小星球。 很多同学学到指针、动态内存、变量作用域时都会困惑&#xff1a; 为什么局部变量出函数就失效&#xff1f;为什么 malloc 出来的内存要手动 free&#xff1f;为什么字符串常量不能改&#xff1f;野指针、内存泄漏到底是怎么产生的&#x…...

嵌入式上位机开发入门(二十二):RTU/TCP 双协议互斥访问寄存器

目录 一、前言二、设计思路&#xff1a;共享寄存器 互斥锁三、modbus_mapping_t 结构体四、TCP Server 任务&#xff1a;初始化与调度五、RTU Server 任务&#xff1a;复用资源六、两个任务的协作关系七、总结八、结尾 一、前言 大家好&#xff0c;这里是 Hello_Embed。上篇…...

记录一次前端模型利用freesql映射,报400的问题

前端代码如下: <template> <div> <el-row style="margin-top: 16px"> <el-col :span="6" style="margin-left: 16px"> <span class="font-col" style="width: 100px">名称:</span> …...

LaTeX+BibTeX避坑实录:手把手解决natbib的‘Bibliography not compatible‘报错

LaTeXBibTeX避坑实录&#xff1a;手把手解决natbib的Bibliography not compatible报错 当你第一次看到LaTeX文档中优雅的"作者-年份"引用格式时&#xff0c;可能会被这种学术范十足的排版所吸引。但当你兴冲冲地尝试修改自己的参考文献样式时&#xff0c;屏幕上突然弹…...

网盘直链下载助手完整指南:告别限速,轻松获取真实下载地址

网盘直链下载助手完整指南&#xff1a;告别限速&#xff0c;轻松获取真实下载地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国…...

如何选择轻量级热修复方案?主流框架对比与实施指南

1、 开篇引入 热修复&#xff0c;是指在应用运行时不通过商店审核即可动态替换部分代码或资源&#xff0c;以快速修正缺陷或优化功能的轻量级技术方案。其核心目标是保障业务连续性、缩短故障恢复周期并降低版本迭代风险。与传统整包更新相比&#xff0c;热修复可减少用户流失、…...

基于OFA模型的智能客服系统开发:VQA技术实战

基于OFA模型的智能客服系统开发&#xff1a;VQA技术实战 想象一下这个场景&#xff1a;你是一家电商公司的客服主管&#xff0c;每天要处理上千张用户上传的图片问题——“这个商品有划痕正常吗&#xff1f;”、“我收到的包装破损了怎么办&#xff1f;”、“这个尺寸和我拍的…...