图的邻接矩阵和邻接表
图的邻接矩阵存储方式是两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(即为邻接矩阵)存储图中的边或弧的信息
设图G有n个顶点,则邻接矩阵为一个n×n的方阵,定义为:
抽象数据类型如下
typedef struct Graph
{char vexs[MAXSIZE];int arc[MAXSIZE][MAXSIZE];int numVertexes, numEdges;
}MGraph;
我们设置一个顶点数组为vertex[]={v0,v1,v2,v3…} 边数组为一个对称矩阵,该矩阵关于对角线对称,对角线的元素均为0,因为对角线的元素如 **arc[0][0],arc[1][1]**都是顶点到自身的边,而因为是无向图,所以关于对角线对称。
对于有向图,主对角线的元素依旧为零,但是因为为有向图,所以不一定对称。而有向图的入度和出度入度为v1列各数之和,出度为v1列各数之和。
如果对于带有权值的有向图,设图G是网图,有n个顶点,则邻接矩阵是一个n×n的方阵,定义为
邻接矩阵代码如下
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
#define INFINITY 65535
typedef struct Graph
{char vexs[MAXSIZE];int arc[MAXSIZE][MAXSIZE];int numVertexes, numEdges;
}MGraph;
//建立无向网图的邻接矩阵
void CreatMGraph(MGraph* G)
{int m, n, w;printf("请输入你的顶点数和边数\n");scanf("%d %d", &G->numVertexes, &G->numEdges);for (int i = 0; i < G->numVertexes; i++)scanf(&G->vexs[i]);for (int i = 0; i < G->numVertexes; i++)for (int j = 0; j < G->numVertexes; j++)G->arc[i][j] = INFINITY;for (int i = 0; i < G->numEdges; i++){printf("请输入边(vi,vj)上的下标,下标和权\n");scanf("%d %d %d", &n, &m, &w);G->arc[n][m] = w;G->arc[m][n] = w;}
}
void printMGraph(MGraph* G)
{for (int i = 0; i < G->numVertexes; i++){for (int j = 0; j < G->numVertexes; j++)printf("%10d", G->arc[i][j]);putchar('\n');}
}
int main()
{MGraph* G = (MGraph*)malloc(sizeof(MGraph));CreatMGraph(G);printMGraph(G);return 0;
}
而对于邻接矩阵来说,如果存在定点较多,边数较少的稀疏图,我们发现,对于存储空间的浪费很大,所以我们依旧用一个数组存储顶点信息,但是每个顶点的边关系我们用单链表来存储。
所以抽象数据类型为
在这里插入代码片
图的邻接矩阵和邻接表相关推荐
- 实现图的邻接矩阵和邻接表存储
/** * 实验题目: * 实现图的邻接矩阵和邻接表存储 * 实验目的: * 领会图的两种主要存储结构和图基本运算算法设计 * 实验内容: * ...
- 实现图的邻接矩阵和邻接表的存储
十五,实现图的邻接矩阵和邻接表的存储 #include<stdio.h> #include<stdlib.h> #define max 100 #define INF 3276 ...
- 有向无环图(邻接矩阵和邻接表)
一.图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为: G=(V,E) 其中:G表示一个图,V是图G中顶点的集合,E是图G中顶点之间边的集合. 注: 在线性表中,元素个数可以为零, ...
- c语言邻接表的构建_c语言数据结构--图的邻接矩阵和邻接表操作的基本操作
#include #include #include #define MAX 100 typedef char DataType; typedef int VectorRelationType; ty ...
- 【创建图的邻接矩阵和邻接表】
目录 1.创建图的邻接矩阵 1.1源码 1.2运行效果 2. 创建图的邻接表 2.1源码
- 有向图的邻接矩阵和邻接表画法
本例子展示有向图画邻接表和邻接矩阵,反过来也是如此 大三时自学了了数据结构中的图,发现图中有邻接矩阵和邻接表,作为笔记记录下来 如下图所示,给了一个有向图,求邻接矩阵 怎么做呢? 第一步:和无向图类似 ...
- 图的两种存储方式---邻接矩阵和邻接表
图:图是一种数据结构,由顶点的有穷非空集合和顶点之间边的集合组成,表示为G(V,E),V表示为顶点的集 合,E表示为边的集合. 首先肯定是要对图进行存储,然后进行一系列的操作,下面对图的两种存储方式邻 ...
- 图的两种存储形式(邻接矩阵、邻接表)
图可以使用两种存储结构,分别是邻接矩阵和邻接表. 注意:一个图所对应的邻接矩阵唯一,所对应的邻接表不唯一 一.邻接矩阵 邻接矩阵以矩阵的形式存储图所有顶点间的关系.邻接矩阵具有以下特点: 1.邻接矩阵 ...
- 图的表达与遍历--邻接矩阵和邻接表
今天开始准备学习一个新的数据结构---图,貌似听着挺复杂的,当然实际也不容易啦,所以先从理论上对图有个大概的认识,其实之前咱们学的二叉树就是一种特殊的图,怎么个特殊法呢?因为它没有环,但是图是可以,它 ...
最新文章
- 动态规划与卫星任务规划
- Kali Linux安装字典StarDict
- http,session,cookie
- 2020 年,云游戏将爆发?各大科技公司云游戏布局大曝光!
- 前端开发---ppt展示页面评论区展示
- linq 清除一条数据中的某个字段值_利用Postman中Tests断言校验返回结果
- C# 的基本数据类型
- apache如何加载系统环境变量_游学电子:windows10系统如何用cmd指令设置环境变量...
- 毫米波雷达及其应用精炼介绍
- 如何将影像地图转换为国家2000坐标系
- 【Lua】ToLua逻辑热更新
- cropper.js 裁剪图片并上传(文档翻译+demo)(转)
- 三国刘备十大名言:三分天下要靠“混
- excel导入非法字符处理,form表单等提交参数前后去除空白处理
- 微信公众号拉取扫码功能
- Linux 将文件移动到指定文件夹中
- 目标人脸检测与识别(计算机视觉)
- Carbon插件 基本运用
- 辽宁师范大学本科毕业论文答辩PPT模板
- 年底了,骗子们也要冲业绩了