构造一个有向图
边关系:5 a b 7 a d 4 b c 8 c a 9 c f 5 d c 6 d f 5 e d 1 f e 3 f a
#include <stdio.h> #include <stdlib.h> #define MaxVertexNum 100 typedef char VertexType;//顶点节点的数据类型 typedef int EdgeType;//边权值的数据类型 typedef struct{ VertexType Vertex[MaxVertexNum];//顶点表 EdgeType Edge[MaxVertexNum][MaxVertexNum];//邻接矩阵,边表 int vertexnum,arcnum;//顶点数和边数 }MGraph;//邻接矩阵的存储结构 typedef struct ArcNode{ int adjvex;//该弧所指向的顶点的位置 struct ArcNode *next;//指向下一条弧的指针 }ArcNode;//边表节点 typedef struct VNode{ VertexType data;//顶点信息 ArcNode *first;//指向第一条依附该顶点的弧的指针 }VNode,AdjList[MaxVertexNum];//顶点表节点 typedef struct{ AdjList vertices;//邻接表 int vexnum,arcnum;//图的顶点数和弧数 }ALGraph;//邻接表的存储结构 int Locate(VertexType v){ if(v>=97){return (int)v-97;} else {return (int)v-65;} }//将顶点转换为相应的位置 void CreatGraph(MGraph &M){ EdgeType e; VertexType v1,v2; printf("输入节点数和边数:"); scanf("%d %d",&M.vertexnum,&M.arcnum); printf("输入节点:"); for(int i=0;i<M.vertexnum;i++){ getchar(); scanf("%c",&M.Vertex[i]); } for(int i=0;i<M.vertexnum;i++){ for(int j=0;j<M.vertexnum;j++){ M.Edge[i][j]=0; } } fflush(stdin);//清除缓存,防止下一次的scanf()函数失效 printf("输入路径的权值及其两个节点:\n"); for(int i=0;i<M.arcnum;i++){ scanf("%d %c %c",&e,&v1,&v2); M.Edge[Locate(v1)][Locate(v2)]=e; } }//构造一个有向图 void PrintGraph(MGraph &M){ printf("邻接矩阵\n"); for(int i=0;i<M.vertexnum;i++){ printf(" %c ",M.Vertex[i]); for(int j=0;j<M.vertexnum;j++){ if(M.Edge[i][j]!=0){ printf("%d ",M.Edge[i][j]); } else{printf("0 ");} } printf("\n"); } }//打印邻接矩阵 void CreatMGtoNG(MGraph &M,ALGraph &G){ ArcNode *p; G.vexnum=M.vertexnum; G.arcnum=M.arcnum; for(int i=0;i<G.vexnum;i++){ G.vertices[i].data=M.Vertex[i]; G.vertices[i].first=NULL; } for(int i=0;i<G.vexnum;i++){ for(int j=0;j<G.vexnum;j++){ if(M.Edge[i][j]!=0){ p=(ArcNode*)malloc(sizeof(ArcNode)); p->adjvex=j; p->next=G.vertices[i].first; G.vertices[i].first=p; } } } }//将邻接矩阵转换成邻接表 void PrintALGraph(ALGraph &G){ ArcNode *p; printf("邻接表\n")
for(int i=0;i<G.vexnum;i++){ p=G.vertices[i].first; printf(" %c",G.vertices[i].data); while(p){ printf("->%c<%d>",p->adjvex+'a',p->adjvex); p=p->next; } printf("\n"); } }//打印邻接表 int main(){ MGraph M; ALGraph G; CreatGraph(M); PrintGraph(M); CreatMGtoNG(M,G); PrintALGraph(G); return 0; }