图的基本操作
1 ADT Graph{ 2 数据对象V:V是具有相同特性的数据元素的集合,称为顶点集。 3 数据关系R:R={VR} 4 VR={<v,w>|v,w∈V且P(v,w),<v,w>表示从v到w的弧, 5 谓词P(v,w)定义了弧<v,w>的意义或信息} 6 基本操作: 7 CreateGraph( &G, V, VR ) 8 初始条件:V是图的顶点集,VR是图中弧的集合。 9 操作结果:按V和VR的定义构造图G。 10 DestroyGraph( &G ) 11 初始条件:图G存在。 12 操作结果:销毁图G。 13 LocateVex( G, u ) 14 初始条件:图G存在,u和G中顶点有相同特征。 15 操作结果:若G中存在顶点u,则返回该顶点在图中位置;否则返回其它信息。 16 GetVex( G, v ) 17 初始条件:图G存在,v是G中某个顶点。 18 操作结果:返回v的值。 19 PutVex( &G, v, value ) 20 初始条件:图G存在,v是G中某个顶点。 21 操作结果:对v赋值value。 22 FirstAdjVex( G, v ) 23 初始条件:图G存在,v是G中某个顶点。 24 操作结果:返回v的第一个邻接顶点。若顶点在G中没有邻接顶点,则返回“空”。 25 NextAdjVex( G, v, w ) 26 初始条件:图G存在,v是G中某个顶点,w是v的邻接顶点。 27 操作结果:返回v的(相对于w的)下一个邻接顶点。若w是v的最后一个邻接点,则返回“空”。 28 InsertVex( &G, v ) 29 初始条件:图G存在,v和图中顶点有相同特征。 30 操作结果:在图G中增添新顶点v。 31 DeleteVex( &G, v ) 32 初始条件:图G存在,v是G中某个顶点。 33 操作结果:删除G中顶点v及其相关的弧。 34 InsertArc( &G, v, w ) 35 初始条件:图G存在,v和w是G中两个顶点。 36 操作结果:在G中增添弧<v,w>,若G是无向的,则还增添对称弧<v,w>。 37 DeleteArc( &G, v, w ) 38 初始条件:图G存在,v和w是G中两个顶点。 39 操作结果:在G中删除弧<v,w>,若G是无向的,则还删除对称弧<v,w>。 40 DFSTraverse( G, Visit() ) 41 初始条件:图G存在,Visit是顶点的应用函数。 42 操作结果:对图进行深度优先遍历。在遍历过程中对每个顶点调用函数Visit一次且仅一次。一旦visit()失败,则操作失败。 43 BFSTraverse( G, Visit() ) 44 初始条件:图G存在,Visit是顶点的应用函数。 45 操作结果:对图进行广度优先遍历。在遍历过程中对每个顶点调用函数Visit一次且仅一次。一旦visit()失败,则操作失败。 46 }ADT Graph
Status CreateGraph(MGraph &G)//输入顶点和弧的信息,建立图 { printf("输入顶点数和弧数如:(5,3):"); scanf("%d,%d", &G.vexnum, &G.arcnum); printf("输入%d个顶点(以空格隔开如:v1 v2 v3):", G.vexnum); getchar();//吃掉换行符 int m; for(m = 0; m < G.vexnum; m++){ scanf("%c", &G.vexs[m]); getchar();//吃掉空格符 } for( m = 0; m < G.vexnum; m++){ printf("%c", G.vexs[m]); printf("\n"); getchar();//吃掉空格符 } //初始化并打印初始化的邻接矩阵 int i=0, j=0; for(i = 0; i < G.vexnum; i++){ for(j = 0; j < G.vexnum; j++){ G.arcs[i][j] = 0; printf( "%5d\n",G.arcs[i][j]); } } VexType v1, v2;//分别是一条弧的弧尾和弧头(起点和终点) int w;//对于无权图或网,用0或1表示相邻否;对于带权图或网,则为相应权值 printf("\n每行输入一条弧依附的顶点(先弧尾后弧头)和权值(如:v1 v2 3):\n"); fflush(stdin);//清除残余后,后面再读入时不会出错 for(int k = 0; k < G.arcnum; k++){ scanf("%c %c %d",&v1, &v2, &w); fflush(stdin);//清除残余后,后面再读入时不会出错 i = locateVex(G, v1); j = locateVex(G, v2); G.arcs[i][j] = w; } return OK; //------------------------------------- }