【练习】邻接矩阵法创建图
来源:互联网 发布:张晓松口琴淘宝店 编辑:程序博客网 时间:2024/06/06 08:47
#include<stdio.h>#include<string.h>#include<malloc.h>#include<stdlib.h>typedef char VertexType[4];typedef char InfoPtr;typedef int VRType;#define INFINITY 65535 /*定义一个无限大的值*/#define MaxSize 50 /*最大顶点个数*/typedef enum{DG,DN,UG,UN}GraphKind; /*图的类型:有向图、有向网、无向图和无向网*/typedef struct{ VRType adj; /*对于无权图,用1表示相邻,0表示不相邻;对于带权图,存储权值*/ InfoPtr *info; /*与弧或边的相关信息*/}ArcNode,AdjMatrix[MaxSize][MaxSize];typedef struct /*图的类型定义*/{ VertexType vex[MaxSize]; /*用于存储顶点*/ AdjMatrix arc; /*邻接矩阵,存储边或弧的信息*/ int vexnum,arcnum; /*顶点数和边(弧)的数目*/ GraphKind kind; /*图的类型*/}MGraph;void CreateGraph(MGraph *N);int LocateVertex(MGraph N,VertexType v);void DestroyGraph(MGraph *N);void DisplayGraph(MGraph N);void CreateGraph(MGraph *N)/*采用邻接矩阵表示法创建有向网N*/{ int i,j,k,w,InfoFlag,len; char s[MaxSize]; VertexType v1,v2; printf("请输入有向网N的顶点数,弧数,弧的信息(是:1,否:0): "); scanf("%d,%d,%d",&(*N).vexnum,&(*N).arcnum,&InfoFlag); printf("请输入%d个顶点的值(<%d个字符):\n",N->vexnum,MaxSize); for(i=0;i<N->vexnum;++i) /*创建一个数组,用于保存网的各个顶点*/ scanf("%s",N->vex[i]); for(i=0;i<N->vexnum;i++) /*初始化邻接矩阵*/ for(j=0;j<N->vexnum;j++) { N->arc[i][j].adj=INFINITY; N->arc[i][j].info=NULL; /*弧的信息初始化为空*/ } 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; if(InfoFlag) /*如果弧包含其它信息*/ { printf("请输入弧的相关信息: "); gets(s); len=strlen(s); if(len) { N->arc[i][j].info=(char*)malloc((len+1)*sizeof(char)); /* 有向 */ strcpy(N->arc[i][j].info,s); } } } N->kind=DN; /*图的类型为有向网*/}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 DestroyGraph(MGraph *N)/*销毁网N*/{ int i,j; for(i=0;i<N->vexnum;i++) /*释放弧的相关信息*/ for(j=0;j<N->vexnum;j++) if(N->arc[i][j].adj!=INFINITY) /*如果存在弧*/ if(N->arc[i][j].info!=NULL) /*如果弧有相关信息,释放该信息所占用空间*/ { free(N->arc[i][j].info); N->arc[i][j].info=NULL; } N->vexnum=0; /*将网的顶点数置为0*/ N->arcnum=0; /*将网的弧的数目置为0*/}void DisplayGraph(MGraph N)/*输出邻接矩阵存储表示的图G*/{ 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的:\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"); }}void main(){ MGraph N; printf("创建一个网:\n"); CreateGraph(&N); printf("输出网的顶点和弧:\n"); DisplayGraph(N); printf("销毁网:\n"); DestroyGraph(&N);}
阅读全文
0 0
- 【练习】邻接矩阵法创建图
- 图邻接矩阵创建
- 图邻接矩阵的创建
- 邻接矩阵创建图
- 采用邻接矩阵创建图
- 邻接矩阵图的创建
- 邻接矩阵法的图
- 图--邻接矩阵法
- 邻接矩阵图的创建及遍历
- 邻接矩阵实现无向图的创建
- 无向图的邻接矩阵创建表示
- 图的邻接矩阵表示及创建
- 有向图的创建(邻接矩阵)
- (学习java)邻接矩阵 图的简单创建
- 邻接矩阵的练习
- igraph软件包创建图和网络(创建邻接矩阵)
- 有向图的邻接矩阵表示法(创建,DFS,BFS)
- 图的邻接矩阵表示法
- HTTP
- MD5、RSA、Base64、ASE加密算法
- PAT (Basic Level) Practise (中文)1035. 插入与归并(25)
- 【098】Java利用对象池配合synchronized同步块实现较高效率的线程同步
- hibernate系列十:多对多关联配置及案例(二)
- 【练习】邻接矩阵法创建图
- FASDF
- Java语句
- 函数整理
- SD
- 深入理解HashMap(及hash函数的真正巧妙之处)
- HDU 2010 水仙花数
- python大作战之*args和**kwargs的区别
- 寻找大富翁(25 分)