图的相关种类

目录

数据类型

存储结构

邻接矩阵表示法

无向图

邻接矩阵表示

有向图

实现

邻接矩阵表示

存储结构

创建无向图

优点

缺点

邻接表法表示

表示无向图

表示有向图

存储结构

无向网

特点

十字链表与多重表

十字链表

存储结构

多重表

存储结构


数据类型

存储结构

邻接矩阵表示法

无向图

无向图的度=矩阵中非0元素个数和的一半 

邻接矩阵表示

有向图

因此,有向图的度为矩阵中非0元素个数总和

实现

邻接矩阵表示

存储结构

创建无向图

优点

缺点

邻接表法表示

表示无向图

表示有向图

示例

存储结构

先表示出所有边结点,再将边结点组成链表连接到各个对应顶点上。

示例

无向网

特点

十字链表与多重表

十字链表

为解决有向图求度不方便的问题

存储结构

firstin表示以data为弧头(终点,即指向data顶点-入)的边,firstout表示以data为弧尾(起点-出)的边。

tailvex表示弧的弧尾(起点)顶点序号,headvex表示弧的弧头(终点)顶点序号,

hlink指向下一个弧头相同的弧,tlink指向下一个弧尾相同的弧。

先列出所有弧,再连接到顶点。

多重表

存储结构

相关代码

#include <iostream>
using namespace std;
//图的存储//1.邻接矩阵存储:边数+顶点数+顶点表-一维+边表-二维
#define maxn 20
#define infi 33333333 
//类型定义 
typedef struct {char vexs[maxn];//顶点表 int arc[maxn][maxn];//边表 int vexnum,arcnum;//顶点数与边数 
}adjgraph;
//创建无向图
//1.输入边数与顶点数,初始边表-无穷 
//2.输入顶点,为顶点表赋值 
//3.输入边的顶点及权值,为边表赋值:需要先确定顶点的下标才能确定边 
int getvex(adjgraph *g,char v){for(int i=1;i<=g->vexnum;i++)if(g->vexs[i]==v) return i;return 0;
}
//后期实现!!!! 
//void print(adjgraph *g){
//	for(int i=1;i<=g->vexnum;i++)
//		if(g->vexs[i]==v) return i;
//} 
void create(adjgraph *g){char vex1,vex2;//存储边的顶点 int weigh;//存储边的权值 int  v1,v2;//存储边的下标 cout<<"输入顶点数及边数:"<<endl;cin>>g->vexnum>>g->arcnum;for(int i=1;i<=g->vexnum;i++){//初始边表 for(int j=1;j<=g->arcnum;j++){g->arc[i][j]=infi;} }for(int i=1;i<=g->vexnum;i++){//存储顶点信息 cout<<"请输入第"<<i<<"个顶点信息:\n";cin>>g->vexs[i];}for(int j=1;j<=g->arcnum;j++){//存储边表信息 cout<<"请输入第"<<j<<"条边的顶点信息:\n";cin>>vex1>>vex2;cout<<"请输入第"<<j<<"条边的权值:\n";cin>>weigh;v1=getvex(g,vex1);v2=getvex(g,vex2);g->arc[v1][v2]=weigh;//单向g->arc[v2][v1]=weigh;//双向-无向图 }
}//2.邻接表表示:顶点表+顶点数+边数 
//顶点表:顶点信息+第一条边结点
//边结点:顶点编号+边权+下一条边
int getvex2(adjlist &g,char v){for(int i=1;i<=g.vnum;i++)if(g.vex[i].vex==v) return i;return 0;
}
typedef struct acrnode{//边结点 int adjacr;//记录邻接顶点编号-弧尾 int weigh;//权值 acrnode *next;//有相同弧头顶点的下一个边结点 
}acrnode; 
typedef struct vnode{//顶点类型 char vex;acrnode *first;
}vnode; 
typedef struct {//邻接表 int vnum,acrnum;vnode vex[maxn];//顶点表 
}adjlist;
void create(adjlist &g){char v1,v2;int  vex1,vex2;acrnode n,m; //1.输入顶点数、边数cin>>g.vnum>>g.acrnum; //2.初始邻接表:输入顶点,初始顶点表头指针为空for(int i=1;i<=g.vnum;i++){cin>>g.vex[i].vex;g.vex[i].first=NULL;}//3.输入边顶点,构造边结点,记录弧头与弧尾顶点,头插边表for(int i=1;i<=g.acrnum;i++){cin>>v1>>v2;vex1=getvex2(g,v1);//弧尾 vex2=getvex2(g,v2);//弧头n=new acrnode;//构造边结点//记录边v1->v2; 并插入到顶点v1的边表中 n->adjacr=vex2;//存储邻接v1的顶点v2的编号 n->next=g.vex[vex1].first;//下一个边结点存储原来v1顶点的第一个边结点g.vex[vex1].first=n;//更新v1顶点的第一条边为n,实现插入 //记录边v2->v1:新边结点结构-左边记录邻接指点编号  权值   右边记录具有同样以v2为弧尾的下一条边结点 m=new acrnode;m->adjacr=vex1;//记录邻接v2的顶点v1的编号m->next=g.vex[vex2].first;//下一个边结点存储v2指向的第一个边结点 g.vex[vex2].first=m;//更新顶点v2的第一条边结点,实现插入 } 
}//3.十字链表表示:弧结点+顶点结点==>顶点表+弧数+顶点数-解决有向图找出入度的问题
//弧结点 
typedef struct acrnode{int tailvex,headvex;//弧头+弧尾编号struct acrnode *tailacr,*headacr;//分别具有相同弧头和弧尾的下一条弧结点 
}arcnode;
typedef struct vexnode{char data;//顶点信息 acrnode *tail,*head;//以顶点为弧尾或为弧头的弧结点 
}vexnode; 
typedef struct node{int vnum,acrnum;vexnode v[maxn];
};//4.多重表:顶点结点+边结点==>顶点表+边数+顶点数-解决无向图重复存边的问题
typedef struct acrnode{int tailvex,headvex;//组成边结点的两顶点编号 struct acrnode *tailacr,*headacr;//与边结点顶点相同的边结点 int weigh;//边的权重 
}; 
//顶点结点:顶点信息+指向第一条边的指针 
typedef struct vexnode{char data;acrnode *first;//第一条边结点 
}; 
typedef struct node{int vnum,vacr;vexnode v[maxn];//顶点表 
}; 
int main(){adjgraph g;create(&g);return 0;
} 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity3D小功能】Unity3D中UGUI-Text实现打字机效果

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群&#xff1a;398291828 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 需求要实现Text的打字机效果&#xff0c;一看居然…

关于stm32的复用和重映射问题

目录 需求IO口的复用和重映射使用复用复用加重映射 总结参考资料 需求 一开始使用stm32c8t6&#xff0c;想实现pwm输出&#xff0c;但是原电路固定在芯片的引脚PB10和PB11上&#xff0c;查看了下引脚的功能&#xff0c;需要使用到复用功能。让改引脚作为定时器PWM的输出IO口。…

golang 中的复合类型

前言 所有的api文档都可以使用bash命令 go doc 查看文档的帮助信息 从 Go 1.13 开始&#xff0c;godoc 不再随 Go 发行版一起安装&#xff0c;你需要单独安装它。 需要单独安装 1. go install golang.org/x/tools/cmd/godoclatest 2执行命令 godoc -http:1111 打开浏览器 http:…

开源代码分享(33)-基于储能电站服务的冷热电多微网系统双层优化配置

参考文献&#xff1a; [1]吴盛军,李群,刘建坤,等.基于储能电站服务的冷热电多微网系统双层优化配置[J].电网技术,2021,45(10):3822-3832.DOI:10.13335/j.1000-3673.pst.2020.1838. 1.基本原理 随着储能技术的进步和共享经济的发展&#xff0c;共享储能电 站服务模式将成为未来…

【机器学习】GPT-4中的机器学习如何塑造人类与AI的新对话

&#x1f680;时空传送门 &#x1f50d;引言&#x1f4d5;GPT-4概述&#x1f339;机器学习在GPT-4中的应用&#x1f686;文本生成与摘要&#x1f388;文献综述与知识图谱构建&#x1f6b2;情感分析与文本分类&#x1f680;搜索引擎优化&#x1f4b4;智能客服与虚拟助手&#x1…

微信小程序 npm构建+vant-weaap安装

微信小程序&#xff1a;工具-npm构建 报错 解决&#xff1a; 1、新建miniprogram文件后&#xff0c;直接进入到miniprogram目录&#xff0c;再次执行下面两个命令&#xff0c;然后再构建npm成功 npm init -y npm install express&#xff08;Node js后端Express开发&#xff…

jenkins插件之Jdepend

JDepend插件是一个为构建生成JDepend报告的插件。 安装插件 JDepend Dashboard -->> 系统管理 -->> 插件管理 -->> Available plugins 搜索 Jdepend, 点击安装构建步骤新增执行shell #执行pdepend if docker exec phpfpm82 /tmp/composer/vendor/bin/pdepe…

用C语言实现扫雷

本篇适用于C语言初学者&#xff0c;主要涉及对于函数&#xff0c;数组&#xff0c;分支循环的运用。 目录 设计思想&#xff1a; 总代码&#xff08;改进后&#xff09;&#xff1a; 运行结果展示&#xff1a; 分布介绍&#xff1a; 声明&#xff1a; 代码主体部分&#…

ArcGIS JSAPI 学习教程 - ArcGIS Maps SDK for JavaScript - 框选显示高亮几何对象

ArcGIS JSAPI 学习教程 - ArcGIS Maps SDK for JavaScript - 框选显示高亮对象 核心代码完整代码&#xff1a;在线示例 在研究 ArcGIS JSAPI RenderNode 高亮&#xff08;highlights&#xff09;FBO 的时候&#xff0c;实现了一下框选高亮几何对象&#xff0c;这里分享一下。 …

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:隧道和矿井绘图设备

RockMass 正在努力打入采矿业和隧道工程利基市场。 这家位于多伦多的初创公司正在利用 NVIDIA AI 开发一款绘图平台&#xff0c;帮助工程师评估矿井和施工中的隧道稳定性。 目前&#xff0c;作为安全预防措施&#xff0c;地质学家和工程师会站在离岩石五米远的地方&#xff0…

chrome调试手机网页

前期准备 1、 PC端安装好chrmoe浏览器 2、 安卓手机安装好chrmoe浏览器 3、 数据线 原文地址&#xff1a;https://lengmo714.top/343880cb.html 手机打开调试模式 进入手机设置&#xff0c;找到开发者模式&#xff0c;然后启用USB调试 打开PC端chrome调试功能 1、点击chr…

聚焦Cayman 环二核苷酸(CDNs)

环二核苷酸CDNs 环二核苷酸&#xff08;cyclic dinucleotides&#xff0c;CDNs&#xff09;是一类天然的环状RNA分子&#xff0c;细菌衍生的CDNs分子包括c-di-GMP、c-di-AMP和3,3-cGAMP&#xff0c;它们介导对恶性、病毒性和细菌性疾病的先天免疫的保护作用&#xff0c;并在自…

springboot古诗文学习系统的设计与实现-计算机毕业设计源码91747

摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;古诗文学习系统当然也不能排除在外。古诗文学习系统是以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&am…

跨境反向海淘系统:业务流程解析与未来发展展望

随着全球化的深入发展和互联网技术的飞速进步&#xff0c;跨境购物已经成为越来越多消费者日常生活中的一部分。在这个过程中&#xff0c;反向海淘系统以其独特的优势&#xff0c;逐渐崭露头角&#xff0c;成为跨境电商领域的新星。作为一名在跨境反向海淘系统业务中耕耘了10年…

信创国产化 | 聚铭网络携手银河麒麟完成产品兼容性互认证

在我国信创国产化战略深入推进的大背景下&#xff0c;聚铭网络与麒麟软件积极响应国家号召&#xff0c;共同致力于软件和操作系统的国产化发展。近日&#xff0c;双方宣布已完成产品兼容性互认证工作&#xff0c;这一成果标志着两家公司在信创国产化道路上迈出了坚实的一步。 …

Acrobat Pro DC 2023 for Mac/Win:全平台PDF编辑器的终极解决方案

对于需要处理PDF文档的个人和企业用户来说&#xff0c;Adobe Acrobat Pro DC 2023是一款不可或缺的工具。作为全球领先的PDF编辑器&#xff0c;Acrobat Pro DC 2023在Mac和Windows平台上提供了丰富的功能和令人印象深刻的性能&#xff0c;使其成为用户编辑、转换和管理PDF文档的…

实验9 浮动静态路由配置

--名称-- 一、 原理描述二、 实验目的三、 实验内容四、 实验配置五、 实验步骤 一、 原理描述 浮动静态路由也是一种特殊的静态路由&#xff0c;主要考虑链路冗余。浮动静态路由通过配置一条比主路由优先级低的静态路由&#xff0c;用于保证在主路由失效的情况下&#xff0c;…

商城项目【尚品汇】07分布式锁-2 Redisson篇

文章目录 1 Redisson功能介绍2 Redisson在Springboot中快速入门&#xff08;代码&#xff09;2.1 导入依赖2.2 Redisson配置2.3 将自定义锁setnx换成Redisson实现&#xff08;可重入锁&#xff09; 3 可重入锁原理3.1 自定义分布式锁setnx为什么不可以重入3.2 redisson为什么可…

华为面经整理

文章目录 实习第一面准备提问相关算法相关 第一面结果提问环节 总结 实习 第一面准备 提问相关 操作系统有哪些功能 进程管理&#xff1a; 进程调度、进程同步和通信、多任务处理 内存管理&#xff1a; 内存分配、虚拟内存技术、内存保护 文件系统管理&#xff1a; 文件存储…

数据中心网络架构设计与优化

数据中心是现代企业和组织的核心基础设施&#xff0c;它们用于存储、处理和传输大量的数据和信息。为了满足不断增长的数据需求和提供可靠的服务&#xff0c;设计和优化数据中心网络架构至关重要。 首先&#xff0c;数据中心网络架构设计需要考虑可扩展性。随着业务的增长&…