邻接矩阵的图结构
来源:互联网 发布:在笔记本电脑下载软件 编辑:程序博客网 时间:2024/06/10 13:44
邻接矩阵的图结构
代码如下:
/** 图的临街矩阵的存储形式以及操作 这个图是 :有向图 无权图**/#include <stdio.h>#include <malloc.h>#define MAX 5#define MAXWEIGHT 10000 ///没有边时为无穷///描述整个图的结构体typedef char DataType ;typedef struct{ DataType Vertices[MAX]; int edge[MAX][MAX]; int numOfedge; int numOfVertices; ///因为使用的是数组存储点,在这里给定数组的长度}AdjMGraph;///初始化void Initiate(AdjMGraph * G){ G->numOfedge = 0; G->numOfVertices = 0; int i,j; for(i=0;i<MAX;i++){ for(j=0;j<MAX;j++){ if(i==j) G->edge[i][j] = 0; else G->edge[i][j] = MAXWEIGHT; } }}///插入顶点;void InsertVertex(AdjMGraph * G ,DataType vertiex){ if(G->numOfVertices >=MAX) { printf("邻接表的数组已经满了"); return ; } //开始插入数据 G->Vertices[G->numOfVertices++] = vertiex;}/// 插入边void InsertEdge(AdjMGraph * G,int v1,int v2){ ///判断越界的情况 if(v1 <0 ||v1 >= MAX || v2<0 || v2>=MAX ){ printf("asdasdasd"); return ; } ///创建一个有向边 G->edge[v1][v2] = 1; G->numOfedge++;}///删除边void DeleteEdge(AdjMGraph * G,int v1,int v2){ ///判断越界的情况 if(v1 <0 ||v1 >= MAX || v2<0 || v2>=MAX ){ printf("参数出错"); return ; } if(G->edge[v1][v2]==0 ){ printf("i==j不能删除"); return ; } if(G->edge[v1][v2]){ printf("this edge does not exists !!! "); return ; } G->edge[v1][v2] = 1; G->numOfedge--;}///取第一个邻接结点int GetFirstVertex(AdjMGraph * G,int v1){ if(v1<0||v1>=MAX){ printf("参数出错"); return -1; } int i; for(i=0;i<MAX;i++){ if(G->edge[v1][i]!=0 &&G->edge[v1][i]!=MAXWEIGHT){ return i; } }return -1;}///取下一邻接点int GetNextVertex(AdjMGraph * G,int v1,int v2){ if(v1 <0 ||v1 >= MAX || v2<0 || v2>=MAX ){ printf("参数出错"); return -1; } int i; for(i=v2;i<MAX;i++){ if(G->edge[v1][i]!=0 &&G->edge[v1][i]!=MAXWEIGHT){ return i; } } return -1;}///输出图void print(AdjMGraph *G){int i,j;printf("顶点数组如下n :\n");for(i=0;i<MAX;i++){ printf("%c ",G->Vertices[i]);} printf("\n邻接矩阵如下:\n"); for(i=0;i<MAX;i++){ for(j=0;j<MAX;j++){ printf("%d ",G->edge[i][j]); } printf("\n"); }}///mian函数测试int main(){///初始化AdjMGraph G;Initiate(&G);///开始插入点InsertVertex(&G,'A');InsertVertex(&G,'B');InsertVertex(&G,'C');InsertVertex(&G,'D');InsertVertex(&G,'E');///开始插入边InsertEdge(&G,0,1);InsertEdge(&G,0,4);InsertEdge(&G,1,3);InsertEdge(&G,3,2);InsertEdge(&G,2,1);///输出边的信息print(&G);return 0;}
阅读全文
0 0
- 邻接矩阵的图结构
- 图的邻接矩阵存储结构
- 图的存储结构 邻接矩阵
- 图的存储结构 --- 邻接矩阵
- 图的邻接矩阵存储结构
- 图的存储结构-邻接矩阵
- 图的存储结构-邻接矩阵
- 使用邻接矩阵实现的图结构
- 数据结构:图的存储结构之邻接矩阵
- 图的存储结构(邻接矩阵)
- 图的存储结构(邻接矩阵法)
- 图的常用存储结构----邻接矩阵
- 图的数组(邻接矩阵)存储结构
- 图的存储结构——邻接矩阵
- 图的邻接矩阵存储结构及算法
- 7.2图的存储结构(邻接矩阵)
- 图的储存结构之邻接矩阵
- 图的存储结构——邻接矩阵
- Mac MySQL 使用(第一天)
- python内置函数
- JDK源码学习之集合HashMap、Hashtable、WeakHashMap比较
- YUV与RGB格式转换(一)
- 红黑树
- 邻接矩阵的图结构
- LINQ左外连接
- 从零开始学习OpenCL开发(六)深入API
- 实型数据的输入输出。如何保留x位小数?如何四舍五入?数据类型转换?
- 第七周 5 -排队看病模拟
- python安装pygame无法找到SDL.h文件
- 第一篇:JAVA语言基础(第二章 语言基本语法、第三章 数组、第四章、程序流程控制语句)
- pyside
- 从零开始学习OpenCL开发(七)深入API