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

甘肃兰州做网站株洲网站建设

甘肃兰州做网站,株洲网站建设,手机应用市场下载安装到手机,浙江省建设工程造价信息网5.数据结构-图 5.1 图的定义和基本术语5.1.1 图的定义5.1.2 图的基本术语 5.2图的存储结构5.2.1邻接矩阵采用邻接矩阵表示法创建无向网邻接表 5.1 图的定义和基本术语 5.1.1 图的定义 图 G由两个集合V和E组成,记为 G ( V , E ) G(V,E) G(V,E),其中V是…

5.数据结构-图

  • 5.1 图的定义和基本术语
    • 5.1.1 图的定义
    • 5.1.2 图的基本术语
  • 5.2图的存储结构
    • 5.2.1邻接矩阵
      • 采用邻接矩阵表示法创建无向网
      • 邻接表

5.1 图的定义和基本术语

5.1.1 图的定义

G由两个集合V和E组成,记为 G = ( V , E ) G=(V,E) G=(V,E),其中V是有顶点的有穷非空集合,E是V中顶点偶对的有穷集合,这些顶点偶对称为边。

对于图G,若边集 E ( G ) E(G) E(G)为有向边的集合,则称该图为有向图;若边集 E ( G ) E(G) E(G)为无向边的集合,则称该图为无向图。

有向图中,顶点对 < x , y > <x, y> <x,y>是有序的,它与 < y , x > <y, x> <y,x>是不同的两条边;在无向图中, ( x , y ) (x,y) (x,y) ( y , x ) (y,x) (y,x)是同一条边。为了有别于有向图,无向图的顶点用一对括号括起来。
在这里插入图片描述

5.1.2 图的基本术语

用n表示图中的顶点数目,用e表示边的数目。

子图:假设有两个图 G = ( V , E ) 和 G ′ = ( V ′ , E ′ ) , 如 果 G=(V,E)和G'=(V',E'),如果 G=(V,E)G=(V,E), V ′ ∈ V 且 E ′ ∈ E V' \in V 且 E' \in E VVEE,则称 G ′ G' G G G G子图
在这里插入图片描述
无向完全图和有向完全图:对于无向图,若具有 n ( n − 1 ) / 2 n(n-1)/2 n(n1)/2条边,则称为无向完全图。对于有向图。若具有 n ( n − 1 ) n(n-1) n(n1)条弧,则称为有向完全图。

稀疏图和稠密图:有多少条边或弧(如 e < n l o g 2 n e<nlog_2n e<nlog2n)的图称为稀疏图,反之称为稠密图

权和网:在实际应用中,每条边可以标上具有某种意义的数值,该数值称为该边上的。这些权可以表示从一个顶点到另一个顶点的距离或耗费。这种带权的图通常称为

邻接点:对于无向图G,如果图的边 ( v , v ′ ) ∈ E (v, v')\in E (v,v)E,则称顶点v和v‘为邻接点,即v和v’相邻接。边 ( v , v ′ ) (v, v') (v,v)依附于点v和v‘,或者说边边 ( v , v ′ ) (v, v') (v,v)与顶点v和v’相关联

度、入度和出度:顶点v的是指和v相关联的边的数目,记为 T D ( v ) TD(v) TD(v)入度是以顶点v为头的弧的数目,记为 I D ( v ) ID(v) ID(v)出度是以顶点v为尾的弧的数目,记为 O D ( v ) OD(v) OD(v)。且 T D ( v ) = I D ( v ) + O D ( v ) TD(v)=ID(v)+OD(v) TD(v)=ID(v)+OD(v)

回路或环:第一个顶点和最后一个顶点相同的路径称为回路或环

简单路径、简短回路或简单环:序列中顶点不重复出现的路径称为简单路径。除了第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路,称为简短回路或简单环

连通、连通图和连通分量:无向图中,若从点v到点v’有路径,则称v和v’是连通的。若对图中任意两个顶点 v i 、 v j ∈ E v_i、v_j\in E vivjE v i 、 v j v_i、v_j vivj都是连通的,则G是连通图。连通分量则是指无向图中的极大连通子图。
在这里插入图片描述

强连通图和强连通分量:在有向图G中,如果对于每一对 v i 、 v j ∈ V , v i ! = v j v_i、v_j\in V, v_i !=v_j vivjVvi!=vj,从 v i v_i vi v j v_j vj v j v_j vj v i v_i vi都存在路径,则称G是强连通图。有向图中的极大强连通子图称作有向图的强连通分量。

连通图的生成树:一个极小连通子图,它含有图中全部顶点,但只有足以构成一棵树的 n − 1 n-1 n1条边,这样的连通子图称为连通图的生成树
一棵有n个顶点的生成树有且仅有 n − 1 n-1 n1条边。如果一个图有n个顶点和小于 n − 1 n-1 n1条边,则是非连通图。如果它多于 n − 1 n-1 n1条边,则一定有环。但是,有 n − 1 n-1 n1条边的图不一定是生成树。 在这里插入图片描述

有向树和生成森林:有一个顶点的入度为0,其余顶点的入度均为1 的有向图称为有向树。一个有向图的生成森林是由若干棵有向树组成,含有图中全部顶点,但只有足以构成若干棵不相交的有向树的弧。
在这里插入图片描述

5.2图的存储结构

5.2.1邻接矩阵

G ( V , E ) G(V, E) G(V,E)是具有n个顶点的图,则G的邻接矩阵是具有如下性质的n阶方阵:
A [ i ] [ j ] = { 1 若 < v i , v j > 或 ( v i , v j ) ∈ E 0 反 之 A[i][j] = \left\{\begin{matrix} 1 \ \ 若<v_i, v_j>或(v_i, v_j) \in E\\ 0 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 反之 \end{matrix}\right. A[i][j]={1  <vi,vj>(vi,vj)E0                                          

若G是网(带权值),则邻接矩阵可以定义为:
A [ i ] [ j ] = { w i , j 若 < v i , v j > 或 ( v i , v j ) ∈ E ∞ 反 之 A[i][j] = \left\{\begin{matrix} w_{i,j} \ \ 若<v_i, v_j>或(v_i, v_j) \in E\\ \infty \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 反之 \end{matrix}\right. A[i][j]={wi,j  <vi,vj>(vi,vj)E                                             
在这里插入图片描述

#define MaxInt 32767
#define MVNum 100 using namespace std;typedef char VerTexType;
typedef int ArcType;
typedef struct{VerTexType vexs[MVNum]; //顶点表ArcType arcs[MVNum][MVNum];int vexnum, arcnum; //图的当前点数和边数 
}AMGraphe;

采用邻接矩阵表示法创建无向网

#include <iostream>
#include <vector>
#include <cstring>#define MaxInt 32767
#define MVNum 100 using namespace std;typedef char VerTexType;
typedef int ArcType;
typedef struct{VerTexType vexs[MVNum]; //顶点表ArcType arcs[MVNum][MVNum];int vexnum, arcnum; //图的当前点数和边数 
}AMGraphe;int LocateVex(AMGraphe G, VerTexType v) {for (int i = 0; i < G.vexnum; i++) {if (G.vexs[i] == v) { // 找到匹配的顶点return i;}}return -1; // 未找到返回 -1
}int CreatUDN(AMGraphe &G){cin >> G.vexnum >> G.arcnum; //输入顶点数和边数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 v1, v2, w;cin >> v1 >> v2 >> w;int i = LocateVex(G, v1), j = LocateVex(G, v2);//确定v1和v2在G中的位置,即顶点数组的下标 G.arcs[i][j] = w;G.arcs[j][i] = G.arcs[i][j];} return 1;}int main() {return 0;
}

优点:

1.查询高效
判断两点是否相邻的时间复杂度为 O(1),直接访问 G.arcs[i][j] 即可。
2.适用于稠密图
若图的边数接近顶点数的平方,邻接矩阵能高效存储和查询边信息。
3.便于矩阵运算
适合用矩阵运算(如图的幂运算)来分析路径问题,例如 Floyd 算法求最短路径。
4.易于实现
结构简单,代码实现直观,初始化和操作都比较容易。

缺点:

1.空间消耗大
需要 O(V2) 的存储空间,即使边数很少(稀疏图),仍要存储所有可能的边信息,浪费空间。
2.插入和删除边的效率低
插入边效率高(O(1)),但删除边可能涉及到维护整个矩阵,在某些情况下效率不如邻接表。
3.不适合稀疏图
当边数远小于 V2时,邻接矩阵会有大量的无效存储(0 或 MaxInt)。
4.不易遍历所有邻接点
查找某个顶点的所有邻接点需要遍历整行,时间复杂度 O(V),而邻接表可以直接访问邻接链表,效率更高。

邻接表

邻接表 是图的一种链式存储结构。在邻接表中,对图的每个顶点 v i v_i vi建立一个单链表,把与 v i v_i vi相邻接的顶点放在这个链表中。可以把这一节点看出链表的表头,其余结点存放有关边的信息,这样邻接表便由两部分组成:表头结点表和边表。

http://www.dtcms.com/wzjs/597542.html

相关文章:

  • 招聘网站怎么做seo南昌哪家做网站好
  • 搭建一个网站需要什么学做淘宝客网站有哪些
  • 企业网站设计哪家好郑州网站建设学习
  • 临沂网站建设教程939网站建设
  • 滨州北京网站建设备案网站代理商
  • 长春本地网站制作知名网站建设企业多少钱
  • IT男网站建设设计网站需提供什么
  • 小型网站用typescript玉环市建设工程检测中心网站
  • 大连网站建设网站建设app软件开发的费用设计
  • 做网站哪家好 张家口南通网站建设报价
  • 做泵阀到哪个网站好网络维护培训
  • 国内网站做得好的公司四川住建厅官方网站的网址
  • 优质服务的小企业网站建设凯里网站建设公司哪家好
  • 网站开发网络公司兼职wordpress全站网易云音乐播放
  • 中山手机网站开发互联网产品代理项目
  • 广告图片网站嘉兴市建设官方网站
  • 提供免费服务器的网站宝安做网站信科
  • 公司官网网站建设建设工程施工合同条例
  • 易语言怎么做点击按钮打开网站烟台网站建设联系企汇互联专业
  • 阳网站建设google 字体 wordpress
  • python做网站比php网络营销的优势是什么
  • 不懂英文怎么做英文的seo网站网吧手机网站模版
  • 旅游网站建设技术解决方案移动互联网开发考试
  • 网站建设怎么进后台互联网推广策划
  • 湖北省建设厅监督网站知名网站制作全包
  • 网站建设费用推荐网络专业网站开发具体是干什么的
  • 网站赚钱方法wordpress4.9火车头发布模板
  • 网站创建怎么做网站开发教程全集
  • 什么网站做婚礼请柬seo快速排名网站优化
  • 网站的弹窗怎么做沈阳世纪兴电子商务服务中心