首页 > 编程知识 正文

数据结构严蔚敏,数据结构图形结构

时间:2023-05-03 14:09:04 阅读:156092 作者:1224

数据结构——有向图有向图; 有向图d是指有向三元组(v(d ),a ) d ),D是关联函数,使a ) d )的各要素)称为有向边或弧)与v ) d )中的一个规则要素)称为顶点或点)对应

领接矩阵:除孤立顶点外,任意顶点至少与一边相关,具有值。 因此,任何有向图都可以不考虑孤立顶点,从那一边开始收集

说明.例如,如果d边为:

(1,1 ),2 ),1,3 ),1,4 ),2,2 ),3 ),2,4 ),3 ),4 ),4 ),

请注意,我们按照词典顺序给出了d边。 但是,这里不是a、b、c、…,而是1、2、3…

根据这个想法,我们可以用矩阵完全记述任意的有向图,这就是有向图的邻接矩阵。[6]

操作:使用相邻矩阵创建有向图

# include stdio.h # include string.h # definemaxweight 999//最大可能边权重值(表示顶点之间的无边连接) (#define MAX_VERTEX_NUM 20 //) //顶点数据类型(字符串,最大长度为4 )//相邻数组类型typedefvrtypeadjmatrix [ max _ vertex _ num ] [ max _ vertex _ num ]; typedef struct { vertextypevexs [ max _ vertex _ num ]; //顶点数组AdjMatrix arcs; //邻接矩阵int vexnum,//顶点的个数arcnum; //边数(}MGraph; //图类型//以下是邻接阵列表示的图的基本操作函数//表示图的邻接矩阵voiddisplay(mgraph*g ) for ) intI=0; iG-vexnum; I ) for(intj=0; jG-vexnum; j ) if(g-ARCS[I][j]==maxweight ) ) printf ) ' %5s ',''; 用//进行无边框连接elseprintf (,g-ARCS ) I )、j ); 打印((n ); }//判断两个顶点是否相同intequal(vertextypeV1,VertexType v2 ) (returnstrcmp ) V1,v2 )==0//顶点数组中的顶点下标int locate (m grapape v2 ) iG-vexnum; I ) if ) equal(g-vexs[I],v ) return i; 返回- 1; //创建有向网络(赋权有向图) voidcreategraph ) mgraph*g ) ) { VertexType v1,v2; VRType weight; int i,j,k; printf ('输入顶点数:'); scanf('%d ',G-vexnum ); printf ('输入边数:'); scanf('%d ',G-arcnum ); //创建顶点数组printf ()每行输入%d个顶点的信息(n ),G-vexnum ); for(I=0; iG-vexnum; I ) scanf('%s ',G-vexs[i]; //初始化相邻阵列for (I=0; iG-vexnum; I ) for ) j=0; jG-vexnum; j ) {G-arcs[i][j]=MAXWEIGHT; //G-arcs[i][j].adj=0; //G-arcs[i][j].info=NULL; (for ) I=0; iG-vexnum; I ) G-arcs[i][i]=0; //顶点不能有指向自身的环边//接受邻接图案数据printf ()每行输入圆弧的起点、终点符号和边权重(n ) ); for(k=0; kG-arcnum; k ) ) /顶点编号、侧权重值scanf('%s%s%d”、v1、v2、weight ); //顶点对应数组元素下标I=locate(g,v1 ); j=locate(g,v2 ); G-arcs[i][j]=weight; //G-arcs[i][j].adj=weight; //G-arcs[j][i]=G-arcs[i][j]; }//主程序示例voidmain(void ) { MGraph g,*gt; gt=g; //获取指向图表类型的指针creategraph(gt )//接受输入,创建有向网络display(gt ); //显示图中的相邻阵列}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。