简单邻接表构造图
2015-11-04 20:22
381 查看
采用经典的数据结构算法,略有改动。
运行结果:
对应的图是这个:
#include <stdio.h> #include <stdlib.h> #define ElenType int #define InfoType char #define VertextType int//顶点信息 #define Status int//返回值类型 #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define MAX_VERTEX_NUM 20 //顶点的最大数量 //讨论无向图(虽然arc代表弧)的邻接表,采用经典的代码命名 /*表节点*/ typedef struct ArcNode{ int adjvex;//该边所指向的顶点位置 ArcNode *nextarc;//指向下一条边 InfoType *info;//边的信息 }ArcNode; typedef struct VNode{ VertextType data;//顶点信息 ArcNode *firstarc;//指向第一条依附于该点的边 }VNode,AdjList[MAX_VERTEX_NUM]; typedef struct{ AdjList vertices; int vexnum,arcnum;//图的顶点数和边数 }ALGraph;//Adjacency List Graph /*创建图*/ void CreateALG(ALGraph &G){ int i,j,k; ArcNode *an; printf("输入图的顶点数和边数:"); scanf("%d%d",&G.vexnum,&G.arcnum); printf("请输入%d个顶点的值:\n",G.vexnum); for(k=0;k<G.vexnum;k++){ scanf("%d",&G.vertices[k].data); G.vertices[k].firstarc = NULL; } for(k=0;k<G.arcnum;k++){ printf("请输入第%d条边的两个结点位置:",k+1); /*如果输入的是结点的值,还要通过LocateVex函数来查找结点在图中的位置*/ /*这里简单起见。直接输入*/ scanf("%d%d",&i,&j); an = (ArcNode*)malloc(sizeof(ArcNode)); an->info = NULL;//没有信息 an->adjvex = j;//先是i到j an->nextarc = G.vertices[i].firstarc;//前插法 G.vertices[i].firstarc = an; an = (ArcNode*)malloc(sizeof(ArcNode)); an->info = NULL;//没有信息 an->adjvex = i;//同时j也会到i an->nextarc = G.vertices[j].firstarc; G.vertices[j].firstarc = an; } } /*打印邻接表*/ void DisPlayALG(ALGraph G){ printf("<结点的值(这里同时也是序号位置)>--位置->\n"); for(int i=0;i<G.vexnum;i++){ printf("<%d>--",i); while(G.vertices[i].firstarc){//第i个结点的邻接结点没打印完 printf("%d->",G.vertices[i].firstarc->adjvex); G.vertices[i].firstarc = G.vertices[i].firstarc->nextarc;//移动指针 } printf("\n"); } } int main(){ ALGraph G; CreateALG(G); DisPlayALG(G); return 0; }
运行结果:
对应的图是这个:
相关文章推荐
- Linux命令——w
- 为什么for(int i=0;i<9;i++) 在c语言中是错误的?
- hdu1219
- hdu1219
- 源生javascript将xml转换成json格式
- sde用sql实现erase
- 归并排序算法之Java实现
- Tomcat 8 解决“At least one JAR was scanned for TLDs yet contained no TLDs”问题
- sde用sql实现erase
- springmvc mybatis 整合 框架源码 bootstrap html5 mysql oracle spring
- C++primer第五版第三章学习笔记
- RecyclerView的下拉刷新和自动加载更多
- Android自定义相机超详细讲解
- hdu5521 Meeting
- AlertDialog中View中的控件设置监听
- java Map及Map.Entry详解
- 2015ACM/ICPC亚洲区长春站 F hdu 5533 Almost Sorted Array
- 不要把配置文件放到你的Git代码仓库
- C++Primer之复合类型
- 交换两个数组的内容