图的创建与遍历(C++)

【C++】图的实现及应用 1、编写为从键盘输入的数据建立图的邻接表存储 2、编写图的深度优先遍历程序 3、编写图的广度优先遍历程序 4、设计选择菜单,以选择菜单方式进行操作。 阅读详情

最近复习到了数据结构中的图这一章,随手整理了些图的创建与遍历的完整代码,如下所示:

#include 
using namespace std;
#define maxSize 100

typedef struct 
{
	int no;	//顶点编号
	char info;	//顶点其他信息
}VertexType;
typedef struct 
{
	int edges[maxSize][maxSize];
	int n,e;
	VertexType vex[maxSize];
}MGraph;//图的邻接矩阵

typedef struct ArcNode//结点信息
{
	int adjvex;
	struct ArcNode *nextarc;
	int info;
}ArcNode;
typedef struct VNode//头结点或链表信息
{
	char data;
	ArcNode *firstarc;
}VNode;
typedef struct 
{
	VNode adjlist[maxSize];//邻接表
	int n,e;//顶点数,边数
}AGraph;//图的邻接表

//基本变量
int visit[maxSize] = {0};
void DFS(AGraph *G,int v);//深度优先搜索
void BFS(AGraph *G,int v);//广度优先搜索
int createGraph(AGraph &graph);//创建图
int getIndex(AGraph graph,int data);//由结点值得到索引

void main()
{
	AGraph graph;
	int ret = createGraph(graph);
	if(ret==1)
	{
		/*cout<<"深度优先搜索"<>graph.n>>graph.e;
	cout<<"请输入所有顶点信息"<>graph.adjlist[i].data;//为什么此处不用申请内存空间,声明时已对数组初始化。
		graph.adjlist[i].firstarc = NULL;
	}
	cout<<"请输入"<>first>>second;
		int m = getIndex(graph,first);
		int n = getIndex(graph,second);
		if(m==-1||n==-1)
			return -1;

		//插入mn
		ArcNode *node = new ArcNode;
		node->adjvex = n;

		//表头插入法
		node->nextarc = graph.adjlist[m].firstarc;
		graph.adjlist[m].firstarc = node;

		//插入nm
		ArcNode *node1 = new ArcNode;
		node1->adjvex = m;

		//表头插入法
		node1->nextarc = graph.adjlist[n].firstarc;
		graph.adjlist[n].firstarc = node1;
	}
	return 1;
}

void DFS(AGraph *G,int v)
{
	ArcNode *p;
	visit[v] = 1;
	cout<adjlist[v].data<<' ';
	p = G->adjlist[v].firstarc;
	while(p!=NULL)
	{
		if(visit[p->adjvex]==0)
		{
			DFS(G,p->adjvex);
		}
		p = p->nextarc;
	}
}

void BFS(AGraph *G,int v)
{
	ArcNode *p;
	int que[maxSize],front=0,rear=0;//定义队列
	int j;
	cout<adjlist[v].data<<" ";
	visit[v] = 1;
	rear = (rear+1)%maxSize;//当前结点进队列
	que[rear] = v;
	while(rear!=front)
	{
		front = (front+1)%maxSize;//顶点出队
		j = que[front];
		p = G->adjlist[j].firstarc;
		while(p!=NULL)
		{
			if(visit[p->adjvex]==0)
			{
				cout<adjlist[p->adjvex].data<<" ";
				visit[p->adjvex] = 1;
				rear = (rear+1)%maxSize;
				que[rear] = p->adjvex;
			}
			p = p->nextarc;
		}
	}
}

图的邻接表存储和遍历(C++) 图的邻接表存储和遍历(C++) 邻接表存储的基本思想是: 边表(邻接表):顶点 v 的所有邻接点链成的单链表 顶点表:所有边表的头指针和存储顶点信息的一维数组 深度优先遍历的伪代码是 算法:DFTraverse 输入:顶点的编号 v 输出:无 1. 访问顶点 v; 修改标志visited[v] = 1; 2. j =顶点 v 的第一个邻接点; 3. while (j 存在) 3.1 if (j 未被访问) 从顶点 j 出发递归执行该算法; 3.2 j = 顶点 v 的下一个邻接点; void ALG 阅读详情

相关推荐

减小伺服电机共振的方法(以松下伺服为例)

嘿 ! 我是【小黄】 , 我们又见面啦 !!! 毕竟技术只有大家交流才会进步嘛 ! 这博客是对自己学习的一点点记录和总结 ,如果您对自动控制感兴趣的话 ,可以关注一下我的动态 , 我们一起学习呀 ! 我们都还年轻 ,我们还有无限可能 。 YES ! 减小伺服电机共振的方法(以松下伺服为例)1. 准备工作:1.1.1 如何推定共振点:1.1.2 测定实操:1.1.3 总结:2. 下期预告: 在我们调试完伺服参数以后机器人运动到某个特定位置会产生振动或异响,我们要做的就是消除这个异响保..

在下小黄的博客 1万+

数据结构|图的构建及遍历 c++

邻接矩阵(数组)和临接表(链表)邻接矩阵:dfs 深度搜索:按照一条路一直走到头再找另一条路(),构造辅助数组visited[];递归算法邻接表:bfs 广度搜索:看到分叉口就搜索,像二叉树的非递归算法层搜索一样,使用队列,构造辅助数组visited[];图一 邻接矩阵图二 邻接表图三 邻接表说明。

yanyanyanzi111的博客 2502

AD9361 官方例程详解(一)

文章目录前言一、pandas是什么?二、使用步骤总结 前言 一、pandas是什么? 二、使用步骤 总结

weixin_44630490的博客 4万+

到现在建图还是不熟练,请看这篇(C++)

首先,我们要了解什么是图(知道可以跳过)图就是图。首先,图由两部分组成:1.结点2.边给一个图就知道了:其次,图大致分为两种:1.有向图:就是边是有方向的 2.无向图:就是边是无方向的 再其次,结点有三个属性:1.入度:就是指向这个结点的边的数量2.出度:就是指从这个结点出发指向别的结点的边的数量3.权值:就是这个结点的值(不是编号)(无向图中所有结点的入度都等于出度)(同时,边也有可能有权值属性) (刚开始用手写板,请谅解字不好看的问题)最后,在知道了这些后,我们图的类型有多了起来:1.简单图:不存在自

chrischen1109的博客 2327

高通平台 Android T 蓝牙技术全解析:A2DP 与 AVRCP 核心代码路径与交互流程

A2DP 接收端 - 连接流程(AVDTP 打开)

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 288

uniapp - 微信小程序接入官方人脸识别认证详细流程及示例源码,Uniapp微信小程序项目集成官方提供的人脸识别身份验证插件接口(多种示例:人脸核验、身份证件与人脸是否匹配、是否活体、实名认证等)

uni-app微信小程序人脸识别认证,使用uniapp开发微信小程序的人脸采集功能/人脸识别功能,uniapp vue3微信小程序活体人脸识别,Uni-app微信小程序实名认证,uniApp微信小程序人脸认证,UniApp的微信小程序实名认证与人脸识别系统开发,人脸核身微信小程序uni-app接入流程,wx.startFacialRecognitionVerify,uniapp开发微信小程序-人脸采集功能、微信人脸识别实名认证集成指南,识别失败,人脸识别接口怎么调用,前后端完整示例代码demo,人脸检测功能

🏆 前端领域优质创作者 3280

【C++】图

主要完成图基本操作的实现,图中顶点的数据类型为char 主要完成下面6个操作: 以邻接矩阵为存储结构,创建有向图 以邻接表为存储结构,创建无向图 在图中查找某个顶点的位置 以邻接矩阵为存储结构,创建有向网 深度遍历图 广度遍历图 使用迪杰斯特拉算法求图中某个顶点到其它顶点的最短路径 #include <iostream> #include <stdlib.h> #inc...

cout0 1666

SAP PS 收入确认方法配置清单(成本推导收入 / 项目进度推导收入)

摘要:本文详细介绍了SAPPS模块中两种收入确认方法的配置流程:成本推导收入(成本比例法)和项目进度推导收入(里程碑法)。通过事务码OKG1-OKG5等关键配置步骤,分别实现基于累计成本比例和里程碑完成权重的收入确认逻辑。文章对比了两种方法的适用场景和管控要点:成本法适用于成本与进度强相关的项目,需严控预计总成本;进度法则依赖明确的里程碑验收。同时提供了落地建议,包括项目类型绑定、数据校验和变更管控等最佳实践,为SAPPS系统收入确认功能实施提供完整指导。

金牌架构师 952

【C++】数据结构图的简单创建和遍历

图的表达方式非常的多,要找到一种自己熟练的表达方式非常重要,这里就介绍一下左神的推荐 在写图之前先简单了解一下在本文章中set集合,栈和队列的使用方法 Set集合 set<int> a; a.begin()--返回迭代器(可以先理解为指针)指向的第一个元素 a.empty()--判断集合是否为空,如果为空返回true a.find()--寻找到一个元素 a.end()--返回迭代器指向最后一个元素 a.count()--返回某个值在集合中出现的次数 a.insert(x)--.

qq_56974632的博客 1509

微信小程序(云开发) - 实现微信小程序拼团功能+前后台源码/数据库设计,开团参团、自动成团、微信分享链接URL参与拼团、组团人数/倒计时/实时数据、设置拼团人数限制等(拼团退款处理逻辑、订单同步等)

实现微信小程序云开发拼团功能,云开发小程序--微信拼团设计实现,微信小程序实现秒杀、拼团等效果,微信小程序云开发拼团源码完整版 包含前后台和数据库,拼团商城小程序开发,分销,拼团,社群团购,微信小程序—判断参团人数(设置拼团剩余人数数组)拼多多拼团小程序开发,微信云开发教程怎么实现微信小程序云开发拼团功能?云开发如何实现拼团,拼团小程序怎么弄,微信小程序案例:拼团模块,需要朋友助力,详细源码demo示例,如何做拼团功能,云开发小程序如何做拼团功能,外卖电商拼团,仿拼多多拼团,拼团后退款怎么办,拼团后订单管理

🏆 前端领域优质创作者 4627

3.摄像头组件- CVP (ISP)

本文介绍 车载摄像头组件-ISP

2401_83458819的博客 1617

C语言——图的建立和遍历

内容概述: 1、用邻接表表示图 2、分别用广度优先遍历和深度优先遍历,遍历图 #include<stdio.h> #include<stdlib.h> #define true 1 #define false 0 //--------------------图的邻接表存储表示----------------------------------- typed...

写作业的猪崽 6976

移动端实战指南:深入理解 & 接入 IAB OMSDK

OMSDK(OpenMeasurementSDK)是IABTechLab推出的标准化测量工具,用于统一移动端/原生App广告的可见性和验证流程。其核心包括Native库(采集设备数据)和OMID JavaScript层(实现通信),通过标准化接口让开发者只需接入一套SDK即可兼容多个测量厂商,减少冲突和性能损耗。v1.4版本强化了对CTV和原生App场景的支持,而v1.5新增了画中画检测等功能。集成流程需通过IAB技术实验室注册下载,并遵循严格的命名空间规则。测试阶段需嵌入验证脚本并通过指定工具验证

帅次的博客 1185

图的遍历(深度优先遍历DFS,广度优先遍历BFS)以及C语言的实现

遍历的定义: 从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历,它是图的基本运算. 一:深度优先遍历(DFS) 1,在访问图中某一起始顶点V后,由V出发,访问它的任一邻接顶点W1 2,再从W1出发,访问与W1邻接但还未被访问过的顶点W2; 3,然后再从W2出发,进行类似的访问...... 4,如此进行下去,直至到达所有的邻接顶点都被访问过的顶点U为止. 5,接着,退回一步,退到前一次刚访问过的顶点,看是否还有其它没有被访问过的邻接点 6,如

any_ways的博客 3万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【数据结构】图的创建与遍历

【数据结构】图的存储方式和遍历方法介绍,以及C语言代码编写例程。 存储方式包括邻接矩阵、邻接表、十字链表、邻接多重表、边集数组;遍历方法包括深度优先遍历和广度优先遍历算法。

qq_41563510的博客 7438

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【C语言数据结构】图的创建和遍历(数形结合,简单详细!)

学习这一节之前,我们需要弄懂一些基础的概念,不然会在学后面的时候有点迷糊。线性表中我们把数据元素叫元素,在树中叫结点,在图中叫顶点(Vertex)。2.邻接矩阵:(无向图)一种用于表示图的数据结构。它是一个二维数组,其中的元素表示图中顶点之间的连接关系。对于一个有n个顶点的图,邻接矩阵是一个大小为n×n的二维数组。要是图中有两个顶点(假设是第1个和第2个顶点)相连(存在一条边),那么他们对应在邻接矩阵中的第1行第2列和第2行第1列位置为1,其他没有相连的用0表示。

m0_74000825的博客 6592

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

图结构的创建与遍历-C语言

DFS与BFS空间复杂度都是O(n),邻接矩阵时间复杂度都是O(n2),邻接表时间复杂度为O(n+e)

小北的博客 1万+

图的实现(c++)

图(graph)是用线连接在一起的顶点或节点的集合,即两个要素:边和顶点。每一条边连接个两个顶点,用(i,j)表示顶点为 i 和 j 的边。 ​ 如果用图示来表示一个图,一般用圆圈表示顶点,线段表示边。有方向的边称为有向边,对应的图成为有向图,没有方向的边称为无向边,对应的图叫无向图。对于无向图,边(i, j)和(j,i)是一样的,称顶点 i 和 j 是邻接的,边(i,j)关联于顶点 i 和 ...

y1054765649的博客 1万+

图的遍历——C语言

利用邻接矩阵存储一张图,分别采用图的深度优先搜索和广度优先搜索遍历该图,并输出遍历结果。 主程序: #include #include #define MAXVEX  100             //最大顶点数,应由用户定义 #define INFINITY    65535               //用65535来代表无穷大 int visite

zhang0xu0的博客 2万+

图的邻接表创建及深度优先遍历和广度优先遍历

最近在学图,写个笔记。 图的创建一般有邻接矩阵和邻接表两种方法,邻接矩阵对于边数相对于顶点较少的图会有极大的浪费,所以用邻接表,用数组与链表相配合 顶点用一维数组储存 所有顶点的邻接点构成一个线性表,因为邻接点的个数不确定,所以用单链表 图的深度优先搜索是对先序遍历的推广 一个递归的过程,沿着一个方向遍历,一直到最后,然后再回来到另一个结点沿着一个方向。 广度优先遍历就是一层一层的遍历。如上图 ...

lx127372的博客 2万+

图的遍历-深度优先遍历与广度优先遍历(C语言)

目录 邻接矩阵及邻接表的创建 深度优先遍历(DFS) 邻接矩阵的深度优先遍历 结构定义 邻接矩阵的深度优先遍历操作 邻接矩阵的深度优先递归算法 邻接表的深度优先遍历 结构定义 邻接表的深度优先遍历操作 邻接表的深度优先递归算法 广度优先遍历(BFS) 邻接矩阵的广度遍历 结构定义 邻接矩阵的广度遍历算法 邻接表的广度优先遍历 结构定义 邻接表的遍历算法 广度优先遍历所需队列代码

偶然路过的帅小伙z的博客 5933

C语言实现图的深度优先遍历和广度优先遍历

图的深度优先遍历和广度优先遍历图的遍历深度优先遍历广度优先遍历 图的遍历 从给定图中任意指定的顶点(称为初始点)出发,按照某种搜索方法沿着图的边访问图中所有顶点,使每个顶点仅被访问一次,这个过程称为图的遍历 图的遍历方法有两种,一种叫深度优先遍历(DFS),另一种叫广度优先遍历(BFS)。 深度优先遍历 深度优先遍历的过程是从图中的某个初始点v出发,首先访问初始点v,然后选择一个与顶点v相邻且没被...

BEICHENx1的博客 1万+

图的邻接表创建与遍历(C语言)

数据结构  三个结构体,边,顶点,图。 typedef struct Side//边 { int toVertex;//边指向的点 struct side *next; }Side,*sLink; typedef struct Vertex//顶点 { int data; sLink first;//第一个边 }Vertex,AdjList[20]; typed

cjavacjavacjava的博客 4666

图的邻接表的创建与遍历

图的邻接表的创建、深度优先遍历和广度优先遍历 1.邻接表的定义 #define NUM 8 typedef int vex; typedef struct __ArcNode { int adjvex; struct __ArcNode *nextarc; }ArcNode; typedef struct __VNode { vex data; ArcNode *firsta

asd_wolf的专栏 1569

图的创建以及遍历

首先图分为有向图和无向图。 我们先来介绍无向图: 无向图定义:若图中所有的边均满足的两个顶点没有次序关系和方向性,即(v1,v2)和(v2,v1)代表同一条边,则称为无向图。 图所示 无向图就是由结点V={1,2,3,4,5},和边E={(1,2),(1,4),(2,3),(3.4),(3,5),(2,5)},构成的。 我们也不难观察到该图是沿着对角线对称的,即如果图的邻接矩阵是沿对角线对...

不知道起啥名称的博客 1万+

【数据结构】之图的遍历(C语言)

文章目录定义深度优先遍历 定义 从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次,这一过程就叫做图的遍历(Traversing Graph)。 深度优先遍历 深度优先遍历(Depth_First_Search),也有称深度优先搜索,简称DFS。 ...

xiangjunyes的博客 1万+
上一篇: c++中左值与右值的区别
下一篇: 最短路径
hellorichen
博客等级 码龄13年 199粉丝 104原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值