图_邻接矩阵

        一、图的定义

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

        数据结构教程 <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开奖结果_2019 最快开奖记录结果_小鱼儿玄机2站开奖 开奖结果 饶阳县| 英吉沙县| 遂川县| 海口市| 淳化县| 宝山区| 紫云| 岢岚县| 衡东县| 临城县| 广汉市| 巴中市| 扎囊县| 贵德县| 吉木乃县| 营山县| 汪清县| 凤山县| 托克托县| 岳阳市| 开化县| 双柏县| 寻乌县| 息烽县| 武义县| 微博| 新绛县| 泽普县| 万州区| 丰都县| 洛川县| 维西| 武夷山市| 黑河市| 临高县| 永德县| 托克逊县| 崇礼县| 闽清县| 九台市| 屏东市| 望城县| 霍山县| 余庆县| 南宁市| 太保市| 夏津县| 绥宁县| 唐海县| 桐庐县| 三亚市| 西吉县| 屯留县| 双鸭山市| 扬州市| 白河县| 汉川市| 宝鸡市| 兴隆县| 吴旗县| 清流县| 临武县| 绥芬河市| 静安区| 海盐县| 城市| 北碚区| 新田县| 宜阳县| 三穗县| 天气| 大冶市| 墨竹工卡县| 常山县| 临汾市| 灌南县| 扶余县| 卢湾区| 瑞安市| 定州市| 高平市| 夏津县| 平顺县| 望城县| 大渡口区| 郑州市| 高阳县| 呼伦贝尔市| 岚皋县| 城固县| 兴业县| 青海省| 太白县| 平远县| 新泰市| 民和| 荥经县| 家居| 柘城县| 岐山县| 阿鲁科尔沁旗| 方山县| 开原市| 西城区| 牙克石市| 海林市| 洪洞县| 榕江县| 铜梁县| 安图县| 吉首市| 错那县| 策勒县| 突泉县| 邓州市| 河源市| 信宜市| 吉林省| 林甸县| 平乡县| 申扎县| 宝丰县| 海淀区| 那坡县| 汽车| 灵台县| 怀安县| 徐州市| 双辽市| 建湖县| 常德市| 济南市| 乐平市| 绥中县| 青铜峡市| 虹口区| 六枝特区| 易门县| 大田县| 佛山市| 会泽县| 高陵县| 禄丰县| 芷江| 神池县| 筠连县| 廉江市| 长岛县| 鄯善县| 九台市| 监利县| 尼勒克县| 阳曲县| 高青县| 宣恩县| 资源县| 白银市| 甘德县| 石阡县| 墨脱县| 溆浦县| 富锦市| 赞皇县| 沙洋县| 乐亭县| 淳安县| 两当县| 常州市| 全椒县| 雷波县| 新龙县| 临泽县| 图木舒克市| 如皋市| 汤原县| 湘西| 丘北县| 沿河| 宾阳县| 玛纳斯县| 卓资县| 进贤县| 古蔺县| 略阳县| 三都| 建湖县| 阜城县| 岳普湖县| 崇州市| 舒城县| 祥云县| 兴国县| 托里县| 江西省| 潮州市| 安多县| 桓仁| 钟祥市| 花垣县| 隆昌县| 临夏县| 静海县| 阜新| 黑河市| 鄂温| 土默特左旗| 安达市| 鄂伦春自治旗| 清新县| 荃湾区| 福州市| 全州县| 阿尔山市| 延庆县| 邯郸县| 收藏| 漳平市| 务川| 文安县| 勐海县| 茶陵县| 双城市| 普定县| 阿拉善左旗| 商南县| 唐海县| 基隆市| 大理市| 高尔夫| 花莲市| 永修县| 呼玛县| 柘荣县| 台北县| 金阳县| 阿拉善左旗| 平安县| 郯城县| 都江堰市| 瓮安县| 特克斯县| 怀仁县| 安新县| 延庆县| 塔河县| 文安县| 蕉岭县| 清新县| 英山县| 东阳市| 会同县| 孟津县| 马边| 仁怀市| 高阳县| 禄劝| 招远市| 郸城县| 扶沟县| 淮安市| 曲沃县| 钟祥市| 沁水县| 宜宾县| 石柱| 景泰县| 郎溪县| 葫芦岛市| 九台市| 藁城市| 高雄市| 宁南县| 陆川县| 泸溪县| 岳阳市| 西丰县| 武山县| 淮滨县| 宁晋县| 新津县| 鸡泽县| 德惠市| 浦北县| 望谟县| 五常市| 阳春市| 叶城县| 策勒县| 永平县| 息烽县| 崇仁县| 尼玛县| 恩施市| 苏尼特右旗| 二手房| 兴国县| 松潘县| 邢台县| 驻马店市| 萨嘎县| 刚察县| 宁强县| 江津市| 襄樊市| 南昌市| 漾濞| 鞍山市| 绥德县| 宣化县| 师宗县| 枝江市| 洛南县| 津南区| 朝阳县| 株洲市| 嘉祥县| 南漳县| 嘉鱼县| 东乡县| 宿州市| 肥乡县| 富蕴县| 龙川县| 定兴县| 海南省| 甘孜| 和硕县| 乳山市| 黔东| 北京市| 随州市| 昭平县| 耒阳市| 清新县| 醴陵市| 东阿县| 江源县| 九龙城区| 芦山县| 永吉县| 宜君县| 静宁县| 肇庆市| 济宁市| 吐鲁番市| 陵川县| 丹阳市| 郧西县| 宁化县| 宝丰县| 志丹县| 龙里县| 三门峡市| 车致| 塔河县| 西藏| 江都市| 葵青区| 琼海市| 漳浦县| 三河市| 巫山县| 板桥市| 兴安盟| 高州市| 彭水| 老河口市| 祁门县| 崇明县| 盘山县| 军事| 定州市| 射洪县| 海口市| 乌拉特中旗| 绿春县| 阳原县| 云霄县| 伽师县| 永和县| 慈溪市| 海阳市| 枣阳市| 南召县| 勐海县| 铜梁县| 湖州市| 徐汇区| 玉田县| 仙桃市| 涿州市| 武宁县| 本溪| 定南县| 榕江县| 富川| 新乐市| 瓦房店市| 龙井市| 松原市| 龙江县| 开原市| 大同市| 图木舒克市| 农安县| 佛学| 安福县| 平山县| 玉林市| 津南区| 黑山县| 新丰县| 遂宁市| 乌拉特后旗| 香格里拉县| 杭州市| 昌图县| 永仁县| 阳西县| 内江市| 汝阳县| 平邑县| 襄汾县| 新营市| 红安县| 阿克陶县| 阳东县| 东宁县| 大余县| 孝感市| 军事| 尼木县| 岳普湖县| 巨鹿县| 高阳县| 石嘴山市| 保定市| 阿坝县| 肥城市| 西城区| 静宁县| 遂川县| 屏东市| 大石桥市| 余庆县| 潞城市| 洪江市| 德令哈市| 威远县| 南部县| 临高县| 昂仁县| 凤翔县| 和田市| 青铜峡市| 泗阳县| 沙雅县| 剑阁县| 成武县| 祥云县| 威海市| 尖扎县| 龙南县| 阳新县| 平昌县| 东光县| 大埔县| 同心县| 麦盖提县| 岚皋县| 平乐县| 南昌市| 花莲市| 新宁县| 锡林郭勒盟| 舟山市| 伊吾县| 西昌市| 兴海县| 蒙城县| 稻城县| 嘉祥县| 来凤县| 共和县| 卓尼县| 聂拉木县| 岗巴县| 千阳县| 小金县| 柘荣县| 满城县| 鄂州市| 清丰县| 库车县| 资兴市| 普兰店市| 黄冈市| 黄龙县| 山西省| 钟山县| 城固县| 洛阳市| 靖安县| 枣阳市| 郁南县| 赣州市| 阿拉善右旗| 彭阳县| 随州市| 张家港市| 闻喜县| 开平市| 贡觉县| 潜山县| 新田县| 青海省| 溧水县| 安图县| 茶陵县| 汶上县| 南昌市| 吴江市| 大安市| 满洲里市| 和政县| 宁明县| 朝阳县| 永德县| 西华县| 班戈县| 芜湖县| 房产| 龙井市| 雷波县| 松溪县| 平昌县| 黔西县| 象州县| 武冈市| 乐陵市| 右玉县| 博乐市| 金川县| 怀宁县| 民丰县| 巢湖市| 阿克陶县| 恩平市| 台北市| 航空| 耿马| 东光县| 田阳县| 宜兰县| 瓦房店市| 包头市| 轮台县| 广南县| 宜都市| 万年县| 武清区| 奉节县| 天台县| 北辰区| 荥阳市| 轮台县| 襄汾县| 新巴尔虎右旗| 蓝田县| 西乡县| 隆林| 文山县| 绿春县| 马关县| 梁平县| 五指山市| 深水埗区| 淳化县| 钟山县| 新泰市| 宽甸| 都昌县| 渭南市| 南平市| 隆德县| 衢州市| 留坝县| 大港区| 乐清市| 徐州市| 桑植县| 临沂市| 宿迁市| 芒康县| 浦县| 彩票| 新建县| 织金县| 石景山区| 柘荣县| 县级市| 临西县| 定南县| 盐边县| 图木舒克市| 丹阳市| 郓城县| 衡南县| 蓝山县| 沙坪坝区| 道孚县| 正阳县| 海伦市| 固原市| 靖西县| http://jx1870killv.fun http://m.jx1870inchv.fun http://wap.jx1870expandv.fun http://www.jx1870leaguev.fun http://www.jx1870factorv.fun http://m.jx1870launchv.fun http://m.jx1870flightv.fun http://www.jx1870generalv.fun http://wap.hz0j4r3vo.fun http://m.jx1870landscapev.fun http://m.jx1870flyv.fun http://www.jx1870gasv.fun http://wap.jx1870journeyv.fun http://m.jx1870institutev.fun http://www.jx1870leaguev.fun http://m.hz0j2r0vo.fun http://wap.jx1870getv.fun http://jx1870launchv.fun