数据结构与C语言实现(八)——图(上):邻接矩阵表示图
来源:互联网 发布:应用程序软件下载 编辑:程序博客网 时间:2024/04/29 16:13
/*图论图是顶点V和边E构成的1.首先我们考虑使用邻接矩阵来表示一个图。G[i][j],若<vi,vj>是G中的边,那么就为1,否则为0比如<3,0>中间有条线,那么<3,0>为1,那么显然<0,3>也为1;明显有一半是浪费。所以我们只存矩阵的上三角或者下三角。简而言之就是建立一个二维数组下标到一维数组下标的映射,具体映射如下G[N][N] ---> A[N*(N+1)/2] 三角形内元素总数量<vi,vj> ---> G[i][j] ---> A[i*(i+1)/2 + j] 前面i行元素之和+前j个元素。注意,行列数从1开始数,数组从0开始。上面对于无向图使用,<vi,vj>有边则为1,无边为0。对于网络而言——可以将<vi,vj>的数值设为权值。好处——直观,简单,好立即方便检查任意一对顶点之间是否存在边方便找任一顶点的所有邻接点(有边直接相连的顶点)方便计算任何一个顶点的度。(从该点发出的点叫出度,指向这个点的边数叫入度)——无向图:对应行/列非0元素的个数(其实就是邻接点个数)——有向图:对应行非0是出度,对应列非0是入度2.我们可以用链表来表示。*//* 邻接矩阵表示的图结构 */#include <stdio.h>#include <stdlib.h>typedef int VertexType;typedef intEdgeType;#define MAXVEX 100#define INFINITY 65535#define DEBUGtypedef struct{VertexType vexs[MAXVEX];//顶点表,用来存放顶点数目EdgeType arc[MAXVEX][MAXVEX];//邻接矩阵,边int numVertexes, numEdges;}Graph;//在图中寻找某个顶点int Find_Vertex(Graph *g, char ch){int i = 0;for (i = 0; i < g->numVertexes; i++){if (g->vexs[i] == ch)break;}return i;}void CreateGraph(Graph* G){printf("请输入顶点和边数:\n");scanf("%d %d", &G->numVertexes, &G->numEdges);//#ifdef DEBUG//printf("%d %d\n", G->numVertexes, G->numEdges);//#endif // DEBUGprintf("请输入顶点值:\n");for (int i = 0; i < G->numVertexes; i++){scanf("%d", &G->vexs[i]);}//有向网络逆向值为无穷,正向值为权值,自己到自己为0//无向网络不连接为0,有连接为权值for (int i = 0; i < G->numVertexes; i++){for (int j = 0; j < G->numVertexes; j++)G->arc[i][j] = 0;}printf("输入<vi,vj>的两个顶点标号,和权值.\n按Q表示退出\n");while (getchar() != 'q'){int m, n, w;scanf("%d %d %d", &m, &n, &w);G->arc[m][n] = w;G->arc[n][m] = w;}}void Print_Graph(Graph *G){for (int i = 0; i < G->numVertexes; i++){for (int j = 0; j < G->numVertexes; j++){printf("%d ", G->arc[i][j]);}putchar('\n');}}int main(){Graph New_Graph;Graph *G = &New_Graph;CreateGraph(G);Print_Graph(G);return 0;}
阅读全文
0 0
- 数据结构与C语言实现(八)——图(上):邻接矩阵表示图
- 数据结构与算法分析(Java语言描述)(26)—— 邻接矩阵表示稠密图
- 数据结构(C实现)------- 图的邻接矩阵表示
- 数据结构(C实现)------- 图的邻接矩阵表示
- 数据结构之---C语言实现图的数组(邻接矩阵)存储表示
- 图的邻接矩阵c语言表示(无向网)---《数据结构》算法7.2
- 数据结构之图(C++)--邻接矩阵表示(一)
- 数据结构——图的数组实现(邻接矩阵表示法)
- [数据结构]图邻接矩阵C语言简单实现
- 图的遍历(上)——邻接矩阵表示
- 数据结构的C实现_图_邻接矩阵表示
- 图的邻接矩阵(C语言实现)
- 数据结构(C++)—— 图(邻接矩阵)
- [数据结构]图基于邻接矩阵的BFS与DFS的C语言简单实现
- 数据结构——邻接矩阵表示的图的Floyd算法
- 数据结构——邻接矩阵表示的图的Dijkstra算法
- 数据结构——求邻接矩阵表示的图的关节点
- 数据结构——图的邻接矩阵表示法
- Fibonacci扩展(奶牛问题)
- IntelliJ Idea 2017 免费激活方法
- AttributeError: 'dict' object has no attribute 'iteritems'
- Dynamic CRM 2016 IFD配置(3)DNS及防火墙配置
- python == is
- 数据结构与C语言实现(八)——图(上):邻接矩阵表示图
- L2-010. 排座位
- Android MVP模式
- 数据结构与C语言实现(九)——图(上):邻接表,DFS与BFS
- hdu4414
- VS2015运行程序错误,丢失MSVCP120D.dll 的问题
- BOM和DOM
- c语言中判断数字为素数
- jeesite 框架搭建与配置(笔记)