图的邻接矩阵和邻接表表示,及相互之间的转换
2012-10-06 22:09
399 查看
第一次发文,还请各路大神指教。程序是对照《数据结构教程上机实验指导》写的,请指教。
辛苦排的版还是显示不出来,摸索ing。。。。
输出结果:
辛苦排的版还是显示不出来,摸索ing。。。。
#include <stdio.h> #include <malloc.h> typedef int InfoType; #define MAXV 50 //图的邻接矩阵表示 typedef struct VertType { int no; InfoType info; }VertType; typedef struct { int edges[MAXV][MAXV]; int n,e; VertType vexs[MAXV]; }MGraph; //图的邻接表表示 typedef struct ANode { int adjvex; struct ANode *nextarc; InfoType info; }ArcNode; typedef int Vertex; typedef struct VNode { Vertex data; ArcNode *firstarc; }VNode; typedef VNode AdjList[MAXV]; typedef struct { AdjList adjlist; int n,e; }ALGraph;
//输出图的邻接矩阵 void DispMat(MGraph g) { int i,j,n=g.n; for(i=0; i<n; i++) { for(j=0; j<n; j++) { if(g.edges[i][j] == INF) printf("%3d","∞"); else printf("%3d",g.edges[i][j]); } printf("\n"); } }
//输出图的邻接表 void DispAdj(ALGraph *G) { int i,n=G->n; ArcNode *p; for(i=0; i<n; i++) { p = G->adjlist[i].firstarc; if(p) printf("%3d:",i); while(p) { printf("%3d",p->adjvex); p = p->nextarc; } printf("\n"); } }
//邻接矩阵转化为邻接表表示 void MatToList (MGraph g, ALGraph *&G) { int i,j,n=g.n; ArcNode *p; G = (ALGraph *)malloc(sizeof(ALGraph)); for(i=0; i<n; i++) { G->adjlist[i].firstarc = NULL; } for(i=0; i<n; i++) { for(j=n-1; j>=0; j--) { if(g.edges[i][j] != 0) { p = (ArcNode *)malloc(sizeof(ArcNode)); p->adjvex = j; p->info = g.edges[i][j]; p->nextarc = G->adjlist[i].firstarc; G->adjlist[i].firstarc = p; } } } G->n = n; G->e = g.e; }
//邻接表转化为邻接矩阵表示 MGraph ListToMat(ALGraph *G, MGraph g) { int i,j,n=G->n; ArcNode *p; for(i=0; i<n; i++) for(j=0; j<n; j++) g.edges[i][j] = 0; for(i=0; i<n; i++) { p = G->adjlist[i].firstarc; while(p) { g.edges[i][p->adjvex] = p->info; p = p->nextarc; } } g.n = n; g.e = G->e; return g; }
void main() { int i,j; MGraph g,g1; ALGraph *G; int A[MAXV][6] = { {0,5,0,7,0,0}, {0,0,4,0,0,0}, {8,0,0,0,0,9}, {0,0,5,0,0,6}, {0,0,0,5,0,0}, {3,0,0,0,1,0} }; g.n = 6; g.e = 10; for(i=0; i<g.n; i++) for(j=0; j<g.n; j++) { g.edges[i][j] = A[i][j]; } printf("\n"); printf("输出邻接矩阵表示的图g:\n"); DispMat(g); G = (ALGraph *)malloc(sizeof(ALGraph)); printf("转化成邻接表表示的图G;\n"); MatToList(g,G); DispAdj(G); printf("再转化成邻接矩阵表示的图g1:\n"); g1=ListToMat(G,g1); DispMat(g1); printf("\n"); }
输出结果:
相关文章推荐
- 数据结构 图的邻接表表示转换成邻接矩阵表示的算法
- 邻接表和邻接矩阵的相互转换
- 邻接表和邻接矩阵在深度遍历中的相互转换
- Xml和bean之间的相互转换
- 十六进制颜色值域RGB格式颜色值之间的相互转换
- 什么是图和用邻接矩阵、邻接表表示一个图
- C++中char*\wchar_t*\string\wstring之间的相互转换 (转)
- office与pdf之间的相互转换
- BSTR _bstr_t char* 之间的相互转换
- 用php实现xml与json之间的相互转换
- java中json包的使用以及字符串,map,list,自定义对象之间的相互转换
- Windows/DOS与Unix文件格式之间的相互转换(/r/n问题)
- MySQL中竖表和横表之间的相互转换
- Byte[]、Image、Bitmap 之间的相互转换
- C#中父类和子类之间相互转换
- 二进制、八进制、十进制、十六进制之间的相互转换
- 字符编码之间的相互转换 UTF8与GBK
- Java中字符和byte数组之间的相互转换
- 【C++】MFC中的CString和std::string,以及两者之间的相互转换(基于VS201X版本)
- XML和实体类之间相互转换(序列化和反序列化)