图_邻接矩阵

              一、图的定义

              图是一种数据元素间为多对多关系的数据结构,加上一组基本操作构成的抽象数据类型。

              数据结构教程 <wbr>第二十六课 <wbr>图的定义与术语

              ADT Graph{

              数据对象V :V是具有相同特性的数据元素的集合,称为顶点集。

              数据关系R:

              R={VR}

              VR={<v,w>|v,w(-V且P(v,w),<v,w>表示从v到w的弧,谓词P(v,w)定义了弧<v,w>的意义或信息}

              基本操作P:

              CreateGraph(&G,V,VR);

              初始条件:V是图的顶点集,VR是图中弧的集合。

              操作结果:按V和VR的定义构造图G

              DestroyGraph(&G);

              初始条件:图G存在

              操作结果:销毁图G

              LocateVex(G,u);

              初始条件:图G存在,u一G中顶点有相同特征

              操作结果:若G中存在顶点u, 则返回该顶点在图中位置;否则返回其它信息。

              GetVex(G,v);

              初始条件:图G存在,v是G中某个顶点

              操作结果:返回v的值。

              PutVex(&G,v,value);

              初始条件:图G存在,v是G中某个顶点

              操作结果:对v赋值value

              FirstAdjVex(G,v);

              初始条件:图G存在,v是G中某个顶点

              操作结果:返回v的第一个邻接顶点。若顶点在G中没有邻接顶点,则返回“空”

              NextAdjVex(G,v,w);

              初始条件:图G存在,v是G中某个顶点,w是v的邻接顶点。

              操作结果:返回v的(相对于w的)下一个邻接顶点。若w是v的最后一个邻接点,则返回“空”

              InsertVex(&G,v);

              初始条件:图G存在,v和图中顶点有相同特征

              操作结果:在图G中增添新顶点v

              DeleteVex(&G,v);

              初始条件:图G存在,v是G中某个顶点

              操作结果:删除G中顶点v及其相关的弧

              InsertAcr(&G,v,w);

              初始条件:图G存在,v和w是G中两个顶点

              操作结果:在G中增添弧<v,w>,若G是无向的,则还增添对称弧<w,v>

              DeleteArc(&G,v,w);

              初始条件:图G存在,v和w是G中两个顶点

              操作结果:在G中删除弧<v,w>,若G是无向的,则还删除对称弧<w,v>

              DFSTraverser(G,v,Visit());

              初始条件:图G存在,v是G中某个顶点,Visit是顶点的应用函数

              操作结果:从顶点v起深度优先遍历图G,并对每个顶点调用函数Visit一次。一旦Visit()失败,则操作失败。

              BFSTRaverse(G,v,Visit());

              初始条件:图G存在,v是G中某个顶点,Visit是顶点的应用函数

              操作结果:从顶点v起广度优先遍历图G,并对每个顶点调用函数Visit一次。一旦Visit()失败,则操作失败。

              }ADT Graph

              二、图的常用术语

              数据结构教程 <wbr>第二十六课 <wbr>图的定义与术语

              对上图有:G1=(V1,{A1})

              其中:V1={v1,v2,v3,v4} A1={<v1,v2>,<v1,v3>,<v3,v4>,<v4,v1>}

              如果用n表示图中顶点数目,用e表示边或弧的数目,则有:

              对于无向图,e的取值范围是0到n(n-1)/2,有n(n-1)/2条边的无向图称为完全图

              对于有向图,e有取值范围是0到n(n-1)。具有n(n-1)条弧的有向图称为有向完全图

              有很少条边或弧的图称为稀疏图,反之称为稠密图

              数据结构教程 <wbr>第二十六课 <wbr>图的定义与术语

              数据结构教程 <wbr>第二十六课 <wbr>图的定义与术语

              数据结构教程 <wbr>第二十六课 <wbr>图的定义与术语

              v1与v2互为邻接点
              e1依附于顶点v1和v2
              v1和v2相关联
              v1的度为3

              对有向图,如果每一对顶点之间都有通路,则称该图为强连通图。

              数据结构教程 <wbr>第二十六课 <wbr>图的定义与术语

              下面我来创建一个简单的图



              //用(二维数组)邻接矩阵创建图
              //一维数组用于保存顶点信息
              //二维数组用于保存两个顶点的权重关系
              #define _CRT_SECURE_NO_WARNINGS
              #include<stdlib.h>
              #include<stdio.h>
              #include<string.h>
              typedef char VertexType[4];//顶点类型    //VertexType是一个4个char类型的数组类型
              typedef int VRType;  //权值类型
              #define INFINITY 10000 //表示无穷大
              #define MaxSize  50     //最大可定义的结点
              typedef struct //邻接矩阵,存储弧的信息
              {
              
              	VRType adj;//存储权值
              
              } AdjMatrix[MaxSize][MaxSize];
              
              typedef struct //图的类型定义
              {
              	
              	VertexType vex[MaxSize];//用于存储顶点(字符串存储) 
              	AdjMatrix arc;//邻接矩阵,用于存储弧的信息
              	int vexnum, arcnum;//存储顶点数和弧的数目
              
              
              }MGraph;
              
              
              void CreateGraph(MGraph *N)//采用邻接矩阵表示法创建一个有向的带权图(有向网)
              {
              
              	int i, j, k, w;
              	//char s[MaxSize];
              	VertexType v1, v2;//用于顶点的变量
              	printf("请输入有向带权图的顶点数以及弧数:");
              	scanf("%d%d", &(*N).vexnum, &(*N).arcnum);
              	printf("请输入%d个顶点的值\n", N->vexnum);
              	//创建一个数组,用于保存图的各个顶点
              	for (i = 0; i < N->vexnum; i++)
              	{
              		scanf("%s", N->vex[i]); //vex数组保存顶点的值
              
              	}
              	//初始化邻接矩阵
              	for (i = 0; i < N->vexnum; i++)
              	for (j = 0; j < N->vexnum; j++)
              	{
              		N->arc[i][j].adj = INFINITY; //开始将弧的权值赋值为无穷大
              	}
              
              	printf("请输入%d条弧的弧尾,弧头和权值,以空格来间隔:\n", N->arcnum);
              	for (k = 0; k < N->arcnum; k++)  
              	{
              
              		scanf("%s%s%d", v1, v2, &w);
              		i = LocateVertex(*N, v1);
              		j = LocateVertex(*N, v2);
              		N->arc[i][j].adj = w;
              
              	}
              
              }
              int LocateVertex(MGraph N, VertexType v)//在顶点数组中查找顶点v并返回其索引号,找不到返回-1
              {
              	int i;
              	for (i = 0; i < N.vexnum; i++)
              	{
              		if (strcmp(N.vex[i], v) == 0)
              		{
              			return i;
              		}
              
              	}
              	return -1;
              }
              void DisplayGraph(MGraph N)
              {
              	int i, j;
              	printf("有向带权图具有%d个顶点%d条弧,顶点依次是:", N.vexnum, N.arcnum);
              	for (i = 0; i < N.vexnum; i++)//输出图的顶点
              	{
              		printf("%s ", N.vex[i]);//
              
              	}
              	printf("\n输出图的弧:\n");
              	printf("序号I=");
              	for (i = 0; i < N.vexnum; i++)
              	{
              
              		printf("%8d", i);
              	}
              	printf("\n");
              	for (i = 0; i < N.vexnum; i++)
              	{
              		printf("%8d", i);
              		for (j = 0; j < N.vexnum; j++)
              		{
              			printf("%8d", N.arc[i][j].adj);
              		}
              		printf("\n");
              
              
              	}
              
              
              
              }
              int main()
              {
              	MGraph N;
              	printf("创建一个图:\n");
              	CreateGraph(&N);
              	printf("输出图的顶点和弧:\n");
              	DisplayGraph(N);
              	system("pause");
              
              
              	return 0;
              
              }

              相关文章
              相关标签/搜索
              香港蓝月亮精选免费资料大全管家婆王中王鉄算盘开奖结果2019开奖记录结果查询香港马会开奖结果历史纪录在线查询 泰和县| 五寨县| 兴义市| 临猗县| 潜江市| 同江市| 海淀区| 浦城县| 辽源市| 宁都县| 陕西省| 阿拉善右旗| 汪清县| 板桥市| 文登市| 齐齐哈尔市| 定远县| 淳化县| 六枝特区| 元氏县| 五大连池市| 耒阳市| 忻州市| 大足县| 商水县| 紫阳县| 泗阳县| 始兴县| 平塘县| 清涧县| 漾濞| 莲花县| 上林县| 盘山县| 双峰县| 中山市| 师宗县| 梁河县| 闻喜县| 盱眙县| 枣庄市| 阜平县| 汶川县| 莎车县| 阿克| 沙洋县| 辽阳市| 武清区| 道真| 哈尔滨市| 卓资县| 讷河市| 秭归县| 土默特右旗| 海晏县| 浦东新区| 武川县| 扶沟县| 宜阳县| 温州市| 屯留县| 汾西县| 杂多县| 临桂县| 石狮市| 泊头市| 西乡县| 张家口市| 葵青区| 宿松县| 宁津县| 来凤县| 大新县| 长顺县| 什邡市| 洛南县| 甘洛县| 稻城县| 深州市| 南郑县| 鸡西市| 宁远县| 宁城县| 肇庆市| 海原县| 达拉特旗| 阿鲁科尔沁旗| 房产| 登封市| 滨州市| 敖汉旗| 称多县| 温宿县| 泰顺县| 郁南县| 河西区| 峨山| 安仁县| 星座| 寻乌县| 仁怀市| 夏邑县| 临沭县| 荣成市| 乐业县| 连江县| 涿鹿县| 昆明市| 大安市| 蒲城县| 朝阳区| 屏南县| 苍溪县| 永靖县| 成安县| 晋中市| 石屏县| 思茅市| 南澳县| 龙泉市| 昌江| 库车县| 钦州市| 万载县| 通州区| 汪清县| 屯昌县| 即墨市| 龙陵县| 平安县| 拜城县| 霍州市| 克拉玛依市| 宁晋县| 玛沁县| 浠水县| 丽水市| 成都市| 新民市| 青神县| 鄂尔多斯市| 聂拉木县| 新安县| 民权县| 和政县| 融水| 平舆县| 海门市| 五常市| 江城| 遵化市| 云龙县| 二连浩特市| 鄂伦春自治旗| 商水县| 荃湾区| 泽州县| 霍邱县| 霞浦县| 荆州市| 泸溪县| 中西区| 本溪市| 延寿县| 沙河市| 山丹县| 江北区| 宁津县| 隆尧县| 仙桃市| 陵水| 荥经县| 霍林郭勒市| 西宁市| 密云县| 滦南县| 靖安县| 太原市| 兰坪| 西丰县| 吉林省| 焉耆| 荆门市| 虎林市| 乌鲁木齐县| 平安县| 昌邑市| 都兰县| 东港市| 天门市| 浪卡子县| 保山市| 彩票| 扬州市| 增城市| 嘉禾县| 惠安县| 扎赉特旗| 西平县| 井陉县| 武邑县| 浪卡子县| 扎兰屯市| 伊春市| 正宁县| 广丰县| 阳信县| 富源县| 张掖市| 康定县| 兴业县| 鹤岗市| 景泰县| 巴南区| 余姚市| 岳普湖县| 滦平县| 深圳市| 呼玛县| 宜良县| 工布江达县| 上杭县| 封丘县| 雅安市| 阜康市| 丰宁| 顺昌县| 岢岚县| 巴青县| 分宜县| 德格县| 逊克县| 巩留县| 通许县| 云林县| 开鲁县| 扶余县| 修水县| 双流县| 吉安县| 连城县| 塔河县| 彰化市| 大关县| 丰顺县| 无棣县| 塔城市| 临沧市| 白沙| 错那县| 大名县| 云浮市| 太谷县| 霞浦县| 祁门县| 安溪县| 安国市| 新绛县| 永济市| 合作市| 惠来县| 伊通| 友谊县| 璧山县| 北票市| 临邑县| 荔波县| 唐海县| 如东县| 潢川县| 威远县| 云安县| 临湘市| 大石桥市| 东兴市| 临朐县| 东港市| 册亨县| 南召县| 乐东| 海原县| 长沙县| 庆城县| 凤台县| 绵竹市| 北辰区| 宣武区| 绥中县| 绥中县| 泰兴市| 扎兰屯市| 双流县| 溧阳市| 昔阳县| 巴南区| 莆田市| 麟游县| 长兴县| 东安县| 托克逊县| 芷江| 峨边| 县级市| 陕西省| 盐津县| 宜宾市| 庆阳市| 思南县| 浙江省| 友谊县| 民勤县| 云霄县| 红河县| 盐山县| 盐边县| 晋州市| 穆棱市| 蓬莱市| 瓮安县| 怀安县| 车致| 大足县| 织金县| 翁源县| 天台县| 南和县| 泸西县| 崇义县| 宣武区| 保亭| 资溪县| 韶关市| 民丰县| 五家渠市| 日土县| 阿瓦提县| 新丰县| 金溪县| 土默特右旗| 彭泽县| 武夷山市| 晋州市| 淳化县| 松滋市| 抚顺县| 宜宾县| 海兴县| 双峰县| 崇文区| 淮阳县| 灵山县| 晋中市| 无棣县| 阳山县| 秭归县| 上饶县| 太康县| 桐城市| 吉林市| 北川| 克山县| 昂仁县| 洞头县| 绥德县| 齐河县| 祥云县| 阜城县| 海门市| 治多县| 乌海市| 松江区| 股票| 南充市| 万盛区| 江油市| 保康县| 福清市| 涞水县| 红安县| 香河县| 普安县| 荔浦县| 临清市| 靖边县| 大方县| 和硕县| 永康市| 通榆县| 新巴尔虎左旗| 原平市| 吉隆县| 平塘县| 莱阳市| 深州市| 龙川县| 天镇县| 枣庄市| 轮台县| 准格尔旗| 平和县| 扎囊县| 米泉市| 宜都市| 唐河县| 明光市| 高唐县| 仪陇县| 海南省| 泗水县| 泰顺县| 抚松县| 五家渠市| 洪泽县| 阳信县| 合阳县| 密山市| 南丹县| 中超| 吴堡县| 神木县| 托里县| 黄龙县| 革吉县| 当阳市| 乌拉特后旗| 泉州市| 西安市| 鹰潭市| 银川市| 惠来县| 会宁县| 玉山县| 茂名市| 竹北市| 磴口县| 玉环县| 平顶山市| 罗田县| 西充县| 淮滨县| 武义县| 元朗区| 遵义县| 和平县| 东丰县| 望都县| 石台县| 巴南区| 榆中县| 杭州市| 琼海市| 宝山区| 金乡县| 弥渡县| 郸城县| 西峡县| 朔州市| 介休市| 榆林市| 陆丰市| 芜湖市| 北京市| 永川市| 寿阳县| 仪陇县| 隆化县| 巨野县| 惠东县| 景谷| 玉龙| 类乌齐县| 惠水县| 盐亭县| 泌阳县| 云和县| 满城县| 宣汉县| 乌拉特前旗| 密云县| 罗定市| 怀安县| 竹溪县| 怀柔区| 利辛县| 桑日县| 黄龙县| 德钦县| 安康市| 八宿县| 固原市| 张掖市| 渭南市| 濮阳县| 娱乐| 分宜县| 阜新| 塘沽区| 内江市| 苏州市| 孝感市| 英吉沙县| 林甸县| 安仁县| 布拖县| 鹤庆县| 阿坝| 岐山县| 华坪县| 宁陵县| 马山县| 涟源市| 济源市| 多伦县| 泸溪县| 额济纳旗| 香格里拉县| 丰县| 集安市| 景德镇市| 贺州市| 永宁县| 卢湾区| 荣成市| 南陵县| 邳州市| 东光县| 神池县| 德阳市| 成武县| 津南区| 新津县| 滨海县| 红安县| 天水市| 固阳县| 高淳县| 新乡市| 临桂县| 常宁市| 灵山县| 广南县| 永寿县| 永德县| 宾川县| 宣城市| 彩票| 宁都县| 阳城县| 河源市| 印江| 云霄县| 桃园市| 玉山县| 小金县| 三河市| 醴陵市| 湘阴县| 八宿县| 井陉县| 疏附县| 醴陵市| 福建省| 寿光市| 利辛县| 怀柔区| 澄迈县| 巩义市| 杂多县| 鸡西市| 甘孜县| 乌兰县| 彰化市| 康平县| 明水县| 鹰潭市| 博白县| 玉溪市| 二手房| 辽源市| 襄汾县| 阿瓦提县| 田阳县| 唐山市| 通城县| 湘西| 五华县| 哈巴河县| 建德市| 武山县| 临漳县| 镇江市| 正阳县| 增城市| 平远县| 罗定市| 南岸区| 西平县| 青冈县| 清苑县| 塔城市| 五河县| 博湖县| 叙永县| 黑河市| 玉树县| 杭州市| 仙桃市| 静宁县| 萨嘎县| 特克斯县| 乌审旗| 大港区| 侯马市| 安西县| 白朗县| http://wap.jx1870heatv.fun http://wap.jx1870givev.fun http://www.jx1870gearv.fun http://jx1870enhancev.fun http://www.hz0j0r1vo.fun http://wap.jx1870feev.fun http://www.jx1870gazev.fun http://www.jx1870fuelv.fun http://www.hz0j3r4vo.fun http://hz0j1r7vo.fun http://wap.jx1870fairv.fun http://m.jx1870flagv.fun http://www.jx1870hopev.fun http://jx1870jackv.fun http://wap.jx1870fatherv.fun http://www.hz0j4r8vo.fun http://wap.jx1870labelv.fun http://m.jx1870facev.fun