为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

建立有向图的邻接表

2018-02-19 9页 doc 27KB 120阅读

用户头像

is_574951

暂无简介

举报
建立有向图的邻接表建立有向图的邻接表 #include #include #define MAX_VERTEX_NUM 20 #define OK 1 #define ERROR 0 typedef int InfoType; /* 该弧相关信息的指针类型 */ typedef char VertexType; /* 顶点的类型 */ typedef struct ArcNode /* 弧结点的结构 */ { int adjvex; /* 该弧所指向的顶点的位置 */ struct ArcNode *nextarc; /* 指向...
建立有向图的邻接表
建立有向图的邻接 #include #include #define MAX_VERTEX_NUM 20 #define OK 1 #define ERROR 0 typedef int InfoType; /* 该弧相关信息的指针类型 */ typedef char VertexType; /* 顶点的类型 */ typedef struct ArcNode /* 弧结点的结构 */ { int adjvex; /* 该弧所指向的顶点的位置 */ struct ArcNode *nextarc; /* 指向下一条弧的指针 */ InfoType *info; /* 该弧相关信息的指针(觉得应该是某些备注信息)如权值 */ }ArcNode; typedef struct VNode /* 顶点结点的结构 */ { VertexType data; /* 顶点信息 */ ArcNode *firstarc; /* 指向第一条依附该顶点的弧的指针 */ }VNode, AdjList[MAX_VERTEX_NUM]; typedef struct /* 图的邻接表结构定义 */ { AdjList vertices; /* 存放顶点的数组 */ int vexnum, arcnum; /* 图的当前顶点数和弧数 */ int kind; /* 图的种类标志 */ }ALGraph; int CreateUDG(ALGraph &G) /* 邻接表建立无向图 */ { int i,s,d; ArcNode *p, *q; scanf("%d%d",&G.vexnum,&G.arcnum); /* 输入结点数目和边数 */ getchar(); for(i=1; i<=G.vexnum; i++) /* 输入顶点 */ { scanf("%c",&G.vertices[i].data); /* 输入顶点 */ getchar(); G.vertices[i].firstarc = NULL; /* 首先初始化为NULL */ } for(i=1; i<=G.arcnum; i++) { scanf("%d%d",&s,&d); /* 输入一条边依附的起点序号和终点序号 */ getchar(); p = (struct ArcNode *)malloc(sizeof(struct ArcNode)); q = (struct ArcNode *)malloc(sizeof(struct ArcNode)); p->adjvex = d; /* 保存该弧所指向的顶点位置 */ q->adjvex = s; /* 保存该弧所指向的顶点位置 */ p->nextarc = G.vertices[s].firstarc; G.vertices[s].firstarc = p; q->nextarc = G.vertices[d].firstarc; G.vertices[d].firstarc = q; } return OK; } int CreateUDN(ALGraph &G) /* 邻接表建立无向网 */ { int i,s,d,w; ArcNode *p, *q; scanf("%d%d",&G.vexnum,&G.arcnum); /* 输入结点数目和边数 */ getchar(); for(i=1; i<=G.vexnum; i++) /* 输入顶点 */ { scanf("%c",&G.vertices[i].data); /* 输入顶点 */ getchar(); G.vertices[i].firstarc = NULL; /* 首先初始化为NULL */ } for(i=1; i<=G.arcnum; i++) { scanf("%d%d%d",&s,&d,&w); /* 输入一条边依附的起点序号和终点序号 */ getchar(); p = (struct ArcNode *)malloc(sizeof(struct ArcNode)); q = (struct ArcNode *)malloc(sizeof(struct ArcNode)); p->info = (InfoType *)malloc(sizeof(InfoType)); q->info = (InfoType *)malloc(sizeof(InfoType)); p->adjvex = d; /* 保存该弧所指向的顶点位置 */ q->adjvex = s; /* 保存该弧所指向的顶点位置 */ *(p->info) = w; /* 保存权值到一个结点里 */ *(q->info) = w; /* 保存权值到一个结点里 */ p->nextarc = G.vertices[s].firstarc; G.vertices[s].firstarc = p; q->nextarc = G.vertices[d].firstarc; G.vertices[d].firstarc = q; } return OK; } int CreateDG(ALGraph &G) /* 邻接表建立有向图 */ { int i,s,d; ArcNode *p; scanf("%d%d",&G.vexnum,&G.arcnum); /* 输入结点数目和边数 */ getchar(); for(i=1; i<=G.vexnum; i++) /* 输入顶点 */ { scanf("%c",&G.vertices[i].data); /* 输入顶点 */ getchar(); G.vertices[i].firstarc = NULL; /* 首先初始化为NULL */ } for(i=1; i<=G.arcnum; i++) { scanf("%d%d",&s,&d); /* 输入一条边依附的起点序号和终点序号 */ getchar(); p = (struct ArcNode *)malloc(sizeof(struct ArcNode)); p->adjvex = d; /* 保存该弧所指向的终点位置 */ /* 这两句代码相当于单链表的插入操作 */ p->nextarc = G.vertices[s].firstarc; /* 保存顶点所对应的终点位置 */ G.vertices[s].firstarc = p; } return OK; } int CreateDN(ALGraph &G) /* 邻接表建立有向网 */ { int i,s,d,w; ArcNode *p; scanf("%d%d",&G.vexnum,&G.arcnum); /* 输入结点数目和边数 */ getchar(); for(i=1; i<=G.vexnum; i++) /* 输入顶点 */ { scanf("%c",&G.vertices[i].data); /* 输入顶点 */ getchar(); G.vertices[i].firstarc = NULL; /* 首先初始化为NULL */ } for(i=1; i<=G.arcnum; i++) { scanf("%d%d%d",&s,&d,&w); /* 输入一条边依附的起点序号和终点序号 */ getchar(); p = (struct ArcNode *)malloc(sizeof(struct ArcNode)); p->adjvex = d; /* 保存该弧所指向的终点位置 */ p->info = (InfoType*)malloc(sizeof(InfoType)); *(p->info) = w; /* 这两句代码相当于单链表的插入操作 */ p->nextarc = G.vertices[s].firstarc; /* 保存顶点所对应的终点位置 */ G.vertices[s].firstarc = p; } return OK; } int PrintALGraphUDG(ALGraph *G) /* 打印无向图每个结点的单链表 */ { int i; printf("打印无向图/n"); for(i = 1 ; i <= G->vexnum ; i++) { printf("%c: ",G->vertices[i].data); while(G->vertices[i].firstarc->nextarc != NULL) { printf("%d ",G->vertices[i].firstarc->adjvex); G->vertices[i].firstarc = G->vertices[i].firstarc->nextarc; } printf("%d/n",G->vertices[i].firstarc->adjvex); } return OK; } int PrintALGraphUDN(ALGraph *G) /* 打印无向网每个结点的单链表 */ { int i, j; printf("打印无向网/n"); for(i = 1 ; i <= G->vexnum ; i++) { while(G->vertices[i].firstarc->nextarc) { printf("%c --> ",G->vertices[i].data); j = G->vertices[i].firstarc->adjvex; printf("%c",G->vertices[j].data); printf("/tweight: %d/n",*(G->vertices[i].firstarc->info)); G->vertices[i].firstarc = G->vertices[i].firstarc->nextarc; } printf("%c --> ",G->vertices[i].data); j = G->vertices[i].firstarc->adjvex; printf("%c",G->vertices[j].data); printf("/tweight: %d/n",*(G->vertices[i].firstarc->info)); printf("------------------------------------------/n"); } return OK; } int PrintALGraphDG(ALGraph *G) /* 打印有向图每个结点的单链表 */ { int i; printf("打印有向图/n"); for(i = 1 ; i <= G->vexnum ; i++) { printf("%c: ",G->vertices[i].data); if(G->vertices[i].firstarc == NULL) { printf("/n"); continue; } while(G->vertices[i].firstarc) { printf("%d ",G->vertices[i].firstarc->adjvex); G->vertices[i].firstarc = G->vertices[i].firstarc->nextarc; } printf("/n"); } return OK; } int PrintALGraphDN(ALGraph *G) /* 打印有向网每个结点的单链表 */ { int i, j; printf("打印有向网/n"); for(i = 1 ; i <= G->vexnum ; i++) { while(G->vertices[i].firstarc) { printf("%c --> ",G->vertices[i].data); j = G->vertices[i].firstarc->adjvex; /* 取得终点的位置 */ printf("%c",G->vertices[j].data); printf("/tweight = %d/n",*(G->vertices[i].firstarc->info)); G->vertices[i].firstarc = G->vertices[i].firstarc->nextarc; } } return OK; } void main() { ALGraph G; CreateUDG(G); /* 建立无向图 */ PrintALGraphUDG(&G); /* 打印无向图 */ CreateDG(G); /* 建立有向图 */ PrintALGraphDG(&G); /* 打印有向图 */ CreateUDN(G); /* 建立无向网 */ PrintALGraphUDN(&G); /* 打印无向网 */ CreateDN(G); /* 建立有向网 */ PrintALGraphDN(&G); /* 打印有向网 */ }
/
本文档为【建立有向图的邻接表】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索