邻接表存图(出边表+入边表)

来源:互联网 发布:人为什么追求卓越 知乎 编辑:程序博客网 时间:2024/05/22 14:11
#include "stdio.h"#include "stdlib.h"#include "string.h"#include "malloc.h"#define MAX 100struct ArcNode{int adjvex;//临接的边序号.ArcNode *next;//下一个节点};struct Vnode{int data;//顶点信息ArcNode *InputLine;//出边表ArcNode *OutputLine;//入边表};struct Graph{Vnode vertexs[MAX];//顶点数组int vexnum;//顶点数int arcnum;//边数};Graph G;void CreatGraph(){int i;ArcNode *pi;int v1,v2;G.vexnum=0;G.arcnum=0;printf("please input Graph's vexnum or arcnum.\n");scanf("%d %d",&G.vexnum,&G.arcnum);for(i=0;i<G.vexnum;i++){G.vertexs[i].InputLine=G.vertexs[i].OutputLine=NULL;}printf("please input partner number like X X by point to point.\n");for(i=0;i<G.arcnum;i++){scanf("%d %d",&v1,&v2);v1--,v2--;//input linepi=(ArcNode*)malloc(sizeof(struct ArcNode));pi->adjvex=v2;pi->next=G.vertexs[v1].InputLine;G.vertexs[v1].InputLine=pi;//output linepi=(ArcNode*)malloc(sizeof(struct ArcNode));pi->adjvex=v1;pi->next=G.vertexs[v2].OutputLine;G.vertexs[v2].OutputLine=pi;}}void DeleteGraph(){int i;ArcNode *pi;for(i=0;i<G.vexnum;i++){//free input linepi=G.vertexs[i].InputLine;while(pi!=NULL){G.vertexs[i].InputLine=pi->next;free(pi);pi=G.vertexs[i].InputLine;}//free output linepi=G.vertexs[i].OutputLine;while(pi!=NULL){G.vertexs[i].OutputLine=pi->next;free(pi);pi=G.vertexs[i].OutputLine;}}}int main(){CreatGraph();int i;int sum;ArcNode *pi;for(i=0;i<G.vexnum;i++){sum=0;pi=G.vertexs[i].InputLine;while(pi!=NULL){sum++;pi=pi->next;}printf("%d points Inputline is:%d\n",i+1,sum);pi=G.vertexs[i].OutputLine;sum=0;while(pi!=NULL){sum++;pi=pi->next;}printf("%d points OutputLine is %d\n",i+1,sum);}DeleteGraph();return 0;}

0 0
原创粉丝点击