建立图的邻接矩阵或邻接表存储并在此基础知识上实现图的深度和广度优先遍历(共14页).doc
《建立图的邻接矩阵或邻接表存储并在此基础知识上实现图的深度和广度优先遍历(共14页).doc》由会员分享,可在线阅读,更多相关《建立图的邻接矩阵或邻接表存储并在此基础知识上实现图的深度和广度优先遍历(共14页).doc(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上#include stdafx.h#include conio.h#include stdio.h#include stdlib.htypedef enum FALSE, TRUE BOOLEAN;#define OVERFLOW -1#define OK 1#define ERROR 0#define INFINITY INT_MAX /* 最大值 */ /* 根据图的权值类型,分别定义为最大整数或实数 */#define MAX_VERTEX_NUM 20 /* 最大顶点数目 */typedef enum DG, DN, UDG,UDN GraphKind ; /
2、* 有向图,有向网,无向图,无向网 */BOOLEAN VisitedMAX_VERTEX_NUM;BOOLEAN visitedMAX_VERTEX_NUM;#define VEX_NUM 20#define MAXSIZE 50typedef char Vextype;typedef int ElemType;typedef int Status; / 邻接矩阵结构定义typedef struct Vextype vexsVEX_NUM; int adjVEX_NUMVEX_NUM; /*邻接矩阵*/ int n,e; /*顶点数和边数*/ Mgraph; / 邻接表结构定义typedef
3、 struct node /*边结点*/int adjvex; /*邻接点域*/struct node * nextarc; /*指向下一个边结点的指针域*/ EdgeNode; typedef struct vnode /顶点结构,2个域,结点信息和第一个邻接点Vextype vertex; EdgeNode *firstedge; VertexNode; typedef struct /图结构VertexNode adjlistMAXSIZE;int n,e; ALGraph; /int FirstAdjVex(ALGraph G,int v) /在图G中寻找第v个顶点的第一个邻接顶点 i
4、f(!G.adjlistv.firstedge) return -1; else return(G.adjlistv.firstedge-adjvex); int NextAdjVex(ALGraph G,int v,int w) /在图G中寻找第v个顶点的相对于w的下一个邻接顶点 EdgeNode *p;int vi; p=G.adjlistv.firstedge; if(!p) return -1; while(p-adjvex!=w) p=p-nextarc; /在顶点v的弧链中找到顶点w p=p-nextarc;if(!p) return -1; /若已是最后一个顶点,返回-1else
5、 vi=p-adjvex;return vi; /返回下一个邻接顶点的序号 /void CreateMGraph(Mgraph *G) int i,j,k; / char ch; printf(请输入顶点数和边数:n); scanf(%d,%d,&(G-n),&(G-e); /*输入*/ printf(请输入顶点信息:n); for (i=0;in;i+) scanf(%s,&(G-vexsi); for (i=0;in;i+) for (j=0;jn;j+) G-adjij=0; /*初始化邻接矩阵*/ printf(输入每条边对应的两个顶点的序号:n); for (k=0;ke;k+) s
6、canf(%d,%d,&i,&j); /*输入e条边*/G-adjij=1; G-adjji=1; /*对称加入,无向图的邻接矩阵存储建立*/ /*CreateMGraph*/ void CreateALGraph(ALGraph *G) /*建立无向图的邻接表存储*/int i,j,k;char vi;EdgeNode *s; printf(请输入顶点数和边数:n);scanf(%d,%d,&(G-n),&(G-e); printf(请输入顶点信息Vin例如a,每输入一个顶点后回车:n); for (i=0;in;i+) scanf(%s,&vi); G-adjlisti.vertex=vi
7、;G-adjlisti.firstedge=NULL; printf(顶点:);for (i=0;in;i+) printf(%c(%d)-,G-adjlisti.vertex,i+1); printf(n请输入边的信息(vi,vj)n例如:1,2:n);for (k=0;ke;k+) /*建立边表*/scanf(%d,%d,&i,&j); /在头结点和边结点之间插入新的边结点 s=(EdgeNode*)malloc(sizeof(EdgeNode); s-adjvex=j-1; s-nextarc=G-adjlisti-1.firstedge;G-adjlisti-1.firstedge=s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 建立 邻接矩阵 邻接 存储 基础知识 实现 深度 广度 优先 遍历 14
限制150内