【数据结构】— —邻接矩阵和邻接表存储图结构

🎃个人专栏:

🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客

🐳Java基础:Java基础_IT闫的博客-CSDN博客

🐋c语言:c语言_IT闫的博客-CSDN博客

🐟MySQL:数据结构_IT闫的博客-CSDN博客

🐠数据结构:​​​​​​数据结构_IT闫的博客-CSDN博客

💎C++:C++_IT闫的博客-CSDN博客

🥽C51单片机:C51单片机(STC89C516)_IT闫的博客-CSDN博客

💻基于HTML5的网页设计及应用:基于HTML5的网页设计及应用_IT闫的博客-CSDN博客​​​​​​

🥏python:python_IT闫的博客-CSDN博客

欢迎收看,希望对大家有用!

目录

🎯目的:

🎯内容:

🎯环境:

🎯步骤:

内容1——邻接矩阵

 邻接矩阵存储图代码:

内容2——邻接表

邻接表存储图代码: 


 

  🎃Hello,大家好,今天我们要做的是 邻接矩阵和邻接表存储图结构。

🎯目的:

1、掌握图结构的静态及操作特点;

2、掌握图结构的静态存储和常见操作在C语言环境中的实现方法;

3、掌握图结构的遍历算法在C语言环境中的实现方法。

4、理解求最小生成树、最短路径、关键路径的算法实现。

🎯内容:

1、会使用邻接矩阵的方式存储图片,并实现相应操作。

2、会使用邻接表的方式存储图片,并实现相应操作。

🎯环境:

TC或VC++。

🎯步骤:

要求:

内容1——邻接矩阵

(1)使用邻接矩阵的方式存储上边无向图;

(2)以矩阵的形式输出无向图;

(3)在邻接矩阵的基础上实现深度优先遍历和广度优先遍历。

 邻接矩阵存储图代码:

#include "iostream"
using namespace std;
#define MaxInt 0
#define MVNum 100
#define OK 1
typedef char VerTexType;
typedef int ArcType;
typedef int Status;
typedef struct{
	VerTexType vexs[MVNum];//顶点 
	ArcType arcs[MVNum][MVNum];//邻接矩阵 
	int vexnum,arcnum;//当前的点数和边数 
}AMGraph;
Status CreateUDN(AMGraph &G){
	cout<<"请输入总顶点数和总边数:"<<endl; 
	cin>>G.vexnum>>G.arcnum;//输入总顶点数和总边数
	cout<<"请输入各点的信息:"<<endl;
	for(int i=0;i<G.vexnum;i++)//输入各点信息 
		cin>>G.vexs[i];
	for(int i=0;i<G.vexnum;i++) //初始化邻接矩阵
		for(int j=0;j<G.vexnum;j++)
			G.arcs[i][j]=MaxInt;
	for(int k=0;k<G.arcnum;k++){
		int i,j,v1,v2,w;
		cout<<"请输入两个点的信息及权值:"<<endl;
		cin>>v1>>v2>>w;
		i=v1-1;j=v2-1;
		G.arcs[i][j]=w;
		G.arcs[j][i]=G.arcs[i][j];
	} 
	return OK;
}
int main(){
	AMGraph g;
	CreateUDN(g);
	cout<<"无向图邻接矩阵如下:"<<endl;
	for(int i=0;i<g.vexnum;i++){
		for(int j=0;j<g.vexnum;j++)
			printf("%5d",g.arcs[i][j]);
		cout<<endl;
 }	
}

内容2——邻接表

(1)使用邻接表的方式存储图;

(2)以邻接表的形式输出该图;

(3)(选做)实现深度优先遍历和广度优先遍历。

邻接表存储图代码: 

#include "iostream"
using namespace std;
#define MVNum 100
#define OK 1
typedef int OtherInfo;
typedef int Status;
typedef int VerTexType;
typedef struct ArcNode{//边结点 
	int adjvex;//该边所指向的顶点位置
	struct ArcNode *nextarc;//指向下一条边的指针
	OtherInfo info;//和边相关的信息 
}ArcNode;
typedef struct VNode//顶点信息 
{
	VerTexType data; 
	ArcNode *firstarc;//指向第一条依附于带顶点的边和指针 
}VNode,AdjList[MVNum];
typedef struct{
	AdjList vertices;
	int vexnum,arcnum;//图的当前顶点数和边数 
}ALGraph;
Status CreateUDG(ALGraph &G){
	cout<<"输入顶点数和总边数"<<endl;
	cin>>G.vexnum>>G.arcnum;
	cout<<"输入各点"<<endl;
	for(int i=0;i<G.vexnum;i++){//输入各点,构建表头结点
		cin>>G.vertices[i].data;
 		G.vertices[i].firstarc=NULL;
	}  
	for(int k=0;k<G.arcnum;k++)//输入各边,构造边表 
	{	int v1,v2,i,j;
		cout<<"请输入一条边依附的两个顶点:"<<endl; 
		cin>>v1>>v2;
		i=v1-1;
		j=v2-1;
		ArcNode *p1;
		p1=new ArcNode;
		p1->adjvex=j;//邻接点的序号为j;
		p1->nextarc=G.vertices[i].firstarc;
		G.vertices[i].firstarc=p1;
		ArcNode* p2=new ArcNode;
		p2->adjvex=i;
		p2->nextarc=G.vertices[j].firstarc;
		G.vertices[j].firstarc=p2;
	}
	return OK;
}
	Status PrintUDG(ALGraph G) {    //邻接表输出图
    for(int i = 0; i < G.vexnum; i++){     //遍历图中每一个点
        cout << i+1 << "(" << G.vertices[i].data << "):";    //输出当前点的标号和值
        ArcNode *p = G.vertices[i].firstarc;    //指向当前点的第一条边
        while(p) {      //输出与当前点相连的所有点的标号和值
            cout << p->adjvex + 1 << "(" << G.vertices[p->adjvex].data << ")" << "->";
            p = p->nextarc;
        }
        cout << "NULL" << endl;
    }
    return OK;
}
int main(){
	ALGraph g;
	CreateUDG(g);
	PrintUDG(g);
}

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

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

相关文章

XTU-OJ 1227-Robot

题目描述 假设在一个XOY坐标的平面上&#xff0c;机器人一开始位于原点&#xff0c;面向Y轴正方向。 机器人可以执行向左转&#xff0c;向右转&#xff0c;向后转&#xff0c;前进四个指令。 指令为 LEFT:向左转RIGHT:向右转BACK:向后转FORWORD n:向前走n(1≤n≤100)个单位 现在…

10月最新H5自适应樱花导航网站源码SEO增强版

10月最新H5自适应樱花导航网源码SEO增强版。非常强大的导航网站亮点就是对SEO优化比较好。 开发时PHP版本&#xff1a;7.3开发时MySQL版本&#xff1a;5.7.26 懂前端和PHP技术想更改前端页面的可以看&#xff1a;网站的前端页面不好看&#xff0c;你可以查看index目录&#x…

c语言从入门到实战——分支和循环

分支和循环 前言1. if语句1.1 if1.2 else1.3 分支中包含多条语句1.4 嵌套if1.5 悬空else问题 2. 关系操作符3. 条件操作符4. 逻辑操作符&#xff1a;&& , || , &#xff01;4.1 逻辑取反运算符4.2 与运算符4.3 或运算符4.4 练习&#xff1a;闰年的判断4.5 短路 5. swit…

react笔记基础部分(组件生命周期路由)

注意点&#xff1a; class是一个关键字&#xff0c; 类。 所以react 写class, 用classname &#xff0c;会自动编译替换class 点击方法&#xff1a; <button onClick {this.sendData}>给父元素传值</button>常用的插件&#xff1a; 需要引入才能使用的&#xf…

Linux msend.pl配置

1.概述 1.1.说明​​​​​ 本文细描述Linux环境下(arm架构x64)基于perl的msend.pl配置,以实现根据msend.pl进行告警事件的发送。 1.2.环境说明 OS Version:RHEL7.6(arm架构x64) Perl Version: v5.16.3 1.3.msend.pl架构图 2.msend.pl配置 2.1.msend.pl配置 前提:以r…

小学数学作业练习册出题网站源码_支持打印转成PDF

小学数学作业练习册出题网站源码_支持打印转成PDF 小学数学出题网页版源码&#xff0c;加减乘除混合运算&#xff0c;支持自定义数字、小数、混合运算&#xff0c;支持加减乘除运算混合多选&#xff08;一道题中同时随机出现加减乘除运算符&#xff09;支持自定义出题数量&…

三、W5100S/W5500+RP2040树莓派Pico<TCP Client数据回环测试>

文章目录 1. 前言2. 协议简介2.1 简述2.2 优点2.3 应用 3. WIZnet以太网芯片4. TCP Client数据回环测试4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 测试现象 5. 注意事项6. 相关链接 1. 前言 在当今的计算机网络环境中&#xff0c;TCP&#xff08;传输控制协议&am…

R语言代码示例

以下是一个使用R语言和httrOAuth库的下载器程序&#xff0c;用于下载的内容。程序使用以下代码。 # 安装和加载必要的库 install.packages("httr") install.packages("httrOAuth") library(httr) library(httrOAuth) ​ # 设置 http_proxy <- "du…

软件测试面试1000问(含文档)

前前后后面试了有20多家的公司吧&#xff0c;最近抽空把当时的录音整理了下&#xff0c;然后给大家分享下 开头都是差不多&#xff0c;就让做一个自我介绍&#xff0c;这个不用再给大家普及了吧 同时&#xff0c;我也准备了一份软件测试视频教程&#xff08;含接口、自动化、…

XTU-OJ 1178-Rectangle

题目描述 给你两个平行于坐标轴的矩形&#xff0c;请判断两者是不是相交&#xff08;面积有重合的部分&#xff09;&#xff1f; 输入 第一行是一个整数K&#xff0c;表示样例数。 每个样例占两行&#xff0c;每行是4个整数&#xff0c;表示一个矩形的对角线点的坐标&#xff0…

蓝桥杯双周赛算法心得——铺地板(质因数)

大家好&#xff0c;我是晴天学长&#xff0c;这是第二周的蓝桥杯的双周赛&#xff0c;题可出的又好又灵活啊&#xff01;真不错&#xff01; 1) .铺地板 2) .算法思路 1.导入java.util包中的Scanner类&#xff0c;以从用户那里读取输入。 2.main方法是程序的入口点。 3.创建一…

MYSQL(事务+锁+MVCC+SQL执行流程)理解

一)事务的特性: 一致性:主要是在数据层面来说&#xff0c;不能说执行扣减库存的操作的时候用户订单数据却没有生成 原子性:主要是在操作层面来说&#xff0c;要么操作完成&#xff0c;要么操作全部回滚&#xff1b; 隔离性:是自己的事务操作自己的数据&#xff0c;不会受到到其…

sheng的学习笔记-【中】【吴恩达课后测验】Course 3 - 结构化机器学习项目 - 第一周测验

课程3_第1周_测验题 目录&#xff1a;目录 要解决的问题 ① 这个例子来源于实际项目&#xff0c;但是为了保护机密性&#xff0c;我们会对细节进行保护。 ② 现在你是和平之城的著名研究员&#xff0c;和平之城的人有一个共同的特点&#xff1a;他们害怕鸟类。 ③ 为了保护…

超级强大!送你几款Linux 下终极SSH客户端

更多IT技术&#xff0c;请关注微信公众号:“运维之美” 超级强大&#xff01;送你几款Linux 下终极SSH客户端 1.MobaXterm2.Xshell3.SecureCRT4.PuTTY5.FinalShell6.Termius7.WindTerm 安全外壳协议&#xff08;Secure Shell&#xff0c;简称 SSH&#xff09;是一种网络连接协议…

线性代数1:线性方程和系统

Digital Collection (staedelmuseum.de) 图片来自施泰德博物馆 一、前言 通过这些文章&#xff0c;我希望巩固我对这些基本概念的理解&#xff0c;同时如果可能的话&#xff0c;通过我希望成为一种基于直觉的数学学习方法为其他人提供额外的清晰度。如果有任何错误或机会需要我…

【Overload游戏引擎细节分析】standard材质Shader

提示&#xff1a;Shader属于GPU编程&#xff0c;难写难调试&#xff0c;阅读本文需有一定的OpenGL基础&#xff0c;可以写简单的Shader&#xff0c;不适合不会OpenGL的朋友 一、Blinn-Phong光照模型 Blinn-Phong光照模型&#xff0c;又称为Blinn-phong反射模型&#xff08;Bli…

苹果将于8月31日举行今秋的第二场发布会

在今日凌晨&#xff0c;苹果宣布&#xff0c;将于北京时间10月31日早上8点举行今秋的第二场发布会&#xff0c;主题为“来势迅猛”。据多方猜测苹果本次活动的核心产品大概率是搭载全新M3芯片的Mac系列产品。 据了解&#xff0c;在苹果的产品线中&#xff0c;搭载M3芯片的Mac系…

Stable Diffusion WebUI扩展canvas-zoom详细讲解

canvas-zoom这是什么? 这是一个针对画布做一些操作的工具,比如缩放等。 下面来详细说一下这些操作的热键。 重要的热键: 缩放(Alt+滚轮)、移动画布 (F)、全屏 (S) 和重置缩放 (R) (1)Shift + wheel - 缩放画布 按住Shift + 滚轮之后,一点反应都没有,之后按…

vue3检测是手机还是pc端,监测视图窗口变化

1.超小屏幕&#xff08;手机&#xff09; 768px以下 2.小屏设备&#xff08;平板&#xff09; 768px-992px 3.中等屏幕&#xff08;旧式电脑&#xff09; 992px-1200px 4.大屏设备&#xff08;现代电脑&#xff09; 1200px以上 <script setup name"welcome"> i…

Games104现代游戏引擎笔记 网络游戏架构基础

挑战1:网络同步 挑战2:是网络的可靠性&#xff0c;包括应对网络的延迟&#xff0c;丢包和掉线 挑战3: 反作弊和安全系统&#xff0c;因为网络游戏的本质是经济系统 挑战4:多样性(不同设备&#xff0c;不同服务器)&#xff0c;在不停服的情况下热更新 挑战5:大量人数时对高并发…