数据结构:无向图的邻接多重表存储表示 (c实现)
来源:互联网 发布:如何学习书法 知乎 编辑:程序博客网 时间:2024/05/18 01:50
/*******************************************************************
程序:无向图的邻接多重表存储表示
完成时间:2013年6月11日
完成者:小单
********************************************************************/
//-----------------无向图的邻接多重表存储表示------------------------#include <stdio.h>#include <stdlib.h>#include <string.h>#define OVERFLOW -2#define MAX_VERTEX_NUM 20typedef char InfoType;typedef char VertexType[MAX_VERTEX_NUM];typedef enum{unvisited, visited}VisitIf;typedef struct EBox{VisitIf mark; //访问标记int ivex, jvex; //该边依附的两个顶点的位置struct EBox *ilink, *jlink; //分别指向依附这两个顶点的下一条边InfoType *info; //该边信息指针}EBox;//边结点typedef struct VexBox{VertexType data;EBox *firstedge; //指向第一条依附该顶点的边}VexBox; //顶点结点typedef struct {VexBox adjmulist[MAX_VERTEX_NUM]; int vexnum, edgenum; //无向图的当前顶点数和边数}AMLGraph; //图int LocateVex(AMLGraph &G, VertexType v){for(int i=0; i < G.vexnum; ++i){if(strcmp(G.adjmulist[i].data, v) == 0)return i;}return -1;}void CreateUDG(AMLGraph &G){//采用邻接多重表存储表示,构造无向图Gprintf("\n创建无向图...\n\n");printf("请输入图的顶点个数与边数:");scanf("%d%d",&G.vexnum, &G.edgenum);int k,i,j;printf("请输入%d个顶点的值,之间用空格隔开:\n",G.vexnum);for(k=0; k < G.vexnum; ++k){getchar();scanf("%s",G.adjmulist[k].data);G.adjmulist[k].firstedge = NULL;}printf("请输入%d条边所依附的顶点,格式(V1 V2<Enter>):\n",G.edgenum);VertexType v1,v2;EBox *p;for(k=0; k < G.edgenum; ++k){getchar();scanf("%s%s",v1,v2);i = LocateVex(G,v1);j = LocateVex(G,v2);if(i<0 || j < 0)exit(OVERFLOW);p = (EBox *)malloc(sizeof(EBox));if(!p)exit(OVERFLOW);p->ivex = i; //对边结点开始赋值(mark,ivex,jvex,ilink,jlink,info)p->jvex = j;p->ilink = G.adjmulist[i].firstedge; p->jlink = G.adjmulist[j].firstedge;p->info = NULL;p->mark = unvisited;G.adjmulist[i].firstedge = G.adjmulist[j].firstedge = p; //顶点指向其第一条依附的边}printf("恭喜,创建成功!\n");}void DisplayEdge(AMLGraph G){//输出各边int k;EBox *p;for(k=0; k < G.vexnum; ++k){p = G.adjmulist[k].firstedge;while(p){if(p->mark == unvisited){printf("(%s,%s) ",G.adjmulist[p->ivex].data, G.adjmulist[p->jvex].data);p->mark = visited;}p=p->ilink;}}printf("\n");for(k=0; k < G.vexnum; ++k) //将访问标志重新置为未访问的{p = G.adjmulist[k].firstedge;while(p){if(p->mark == visited){p->mark = unvisited;}p=p->ilink;}}}int main(){AMLGraph G;CreateUDG(G);DisplayEdge(G);return 0;}
0 0
- 数据结构:无向图的邻接多重表存储表示 (c实现)
- 数据结构--无向图的邻接多重表存储结构
- 无向图的邻接多重表结构,存储结构及基本功能实现(最全)
- 数据结构_图_邻接多重表做存储结构遍历无向图_C++实现
- 【数据结构笔记】6:无向图的邻接多重表存储结构
- 无向图的邻接多重表存储结构
- 无向图的邻接多重链表存储算法(98)
- 邻接多重表存储无向图以及有关操作
- 数据结构:图(邻接多重表存储 c++实现)
- 数据结构--邻接多重表下的无向图的生成树
- 数据结构之---C语言实现图的邻接表存储表示
- 数据结构:图的邻接表存储表示
- 无向图的邻接表存储
- 数据结构:有向图的十字链表存储表示(c实现)
- c语言实现无向图的邻接表储存
- 数据结构_图_邻接表做存储结构实现求无向图的连通分量_C++实现
- C语言:实现图的邻接表存储表示
- 21.图的存储表示 ------------------------邻接多重表
- Codeforces Round #302 (Div. 2) (ABCD题解)
- Confluence5.4 最新版的安装&破解&汉化
- 用CocoaPods做iOS程序的依赖管理
- 数据库有数据的情况下更改数据类型
- Cordys 对XML操作
- 数据结构:无向图的邻接多重表存储表示 (c实现)
- dp- hdu 5218Game
- linux下格式化u盘
- linux查找目录下的所有文件中是否含有某个字符串 .
- Dynamics CRM 2015 Online Update1 UI界面的更新变化
- zabbix 拿shell步骤
- 封装 UnityEngine.Debug.Log 为Dll ,游戏发布关闭 Log 减少性能消耗
- 查询结果按中文拼音顺序排序
- 在Raspberry Pi上安装openni2_camera