#include<stdio.h> #include<stdlib.h> #define M 20 typedef char type; typedef struct node//边表节点(边) { int adjvex;//邻接点 struct node *next; }EdgeNode; typedef struct vnode//头结点 { type vartex;//顶点信息 EdgeNode *FirstEdge;//邻接表头指针(指向第一条边) }VertexNode; typedef struct//邻接表 { VertexNode adjlist[M];//存放头节点的顺序表 int n,e;//图的顶点数与边数 }LinkedGraph; //从文件读入数据创建图的邻接表 void creat(LinkedGraph *g,char *filename,int c) { int i,j,k; EdgeNode *s; FILE *fp; fp=fopen(filename,"r"); if(fp) { fscanf(fp,"%d%d",&g->n,&g->e);//读入图的顶点数,边数 for(i=0;i<g->n;i++)//读入顶点信息并将其邻接表头指针置空 { fscanf(fp,"%1s",&g->adjlist[i].vartex); g->adjlist[i].FirstEdge=NULL; } for(k=0;k<g->e;k++)//读入每条边 { fscanf(fp,"%d%d",&i,&j);//读入边的顶点序号 s=(EdgeNode*)malloc(sizeof(EdgeNode)); s->adjvex=j;//创建新节点并将其邻接点序号置为j s->next=g->adjlist[i].FirstEdge;//插入到其邻接表最前面 g->adjlist[i].FirstEdge=s; if(c==0)//如果是无向图则对称处理 { s=(EdgeNode*)malloc(sizeof(EdgeNode)); s->adjvex=i; s->next=g->adjlist[j].FirstEdge; g->adjlist[j].FirstEdge=s; } } fclose(fp); } else g->n=0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。