图的数组表示法-数据结构(18)

来源:互联网 发布:淘宝申诉入口网址 编辑:程序博客网 时间:2024/04/24 15:36

一、图

参见P160-P163,关于图这种数据结构,其实就是点与弧,因此表示出这种弧也就表示图。

二、存储结构

//================图的存储结构-数组表示法#define INFINITY 9999 //最大值#define MAX_VERTEX_NUM 20 //最大顶点个数typedef int VRType;typedef char VertexType;//用字符来标识顶点向量typedef enum {DG,DN,UDG,UDN}GraphKind;//标识图的类型 有向图,有向网,无向图,无向网//这个就是每个弧保存的信息typedef struct ArcCell{VRType adj;//如果是无权图的话用01表示是否有联接 在有权的图上 默认值是无穷//InfoType *info;//该弧相关信息的指针}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//顶点信息和弧保存的信息typedef struct {VertexType vexs[MAX_VERTEX_NUM];//顶点向量AdjMatrix arcs;//邻接矩阵int vexnum,arcnum;//图的当前的顶点数和弧数GraphKind kind;//图的种类标识}MGraph;

、操作

Status CreateUDN(MGraph &G,int vexnum,char * vexs,int arcnum,int maps[][6]){//创建无向连通图 vexnum顶点个数 ,vexs对应每个顶点的信息,弧的条数 ,maps对应的各弧的关系G.vexnum = vexnum;G.arcnum = arcnum;G.kind = UDN;for (int i = 0; i < G.vexnum; i++){G.vexs[i] = vexs[i];}//初始化邻阶矩阵 并构造邻接矩阵for (int i = 0; i < G.vexnum; i++){for (int j = 0; j < G.vexnum; j++){if (maps[i][j] == 0){//设置为无穷大的边 G.arcs[i][j].adj = INFINITY;}else{G.arcs[i][j].adj = maps[i][j];//对称弧}}} return OK;}void PrintfUDN(MGraph &G){//打印无向图for (int i = 0; i < G.vexnum; i++){for (int j = 0; j < G.vexnum; j++){printf("%d\t", G.arcs[i][j].adj);}printf("\n");}}

四、执行

int vexnum = 6;//6个顶点char * vexs = "abcdef";int arcnum = 8;//有5条弧int maps[6][6] = { { 0, 0, 10, 0, 30, 100 },{ 0, 0, 5, 0, 0, 0 },{ 0, 0, 0, 50, 0, 0 },{ 0, 0, 0, 0, 0, 10 },{ 0, 0, 0, 20, 0, 60 }, { 0, 0, 0, 0, 0, 0 }};MGraph G;CreateUDN(G,vexnum,vexs,arcnum,maps);PrintfUDN(G);

输出:
9999    9999    10      9999    30      1009999    9999    5       9999    9999    99999999    9999    9999    50      9999    99999999    9999    9999    9999    9999    109999    9999    9999    20      9999    609999    9999    9999    9999    9999    9999请按任意键继续. . .


原创粉丝点击