问一个关于有向图及无向图的问题?
#include <stdio.h>#include <malloc.h>
#define VERTEX_MAX 30 /*最大顶点数*/
#define MAXSIZE 20
void creat_MGraph1();
void creat_MGraph2();
void CreateALGraph1();
void CreateALGraph2();
void printMG();
void printALG();
/*============以下为邻接矩阵的结构描述============*/
typedef char Vextype[3]; /*顶点类型*/
typedef struct
{
Vextype vexs[VERTEX_MAX]; /*顶点信息*/
int arcs[VERTEX_MAX][VERTEX_MAX]; /*邻接矩阵存储 */
int vexnum,arcnum; /*顶点数、边数*/
} MGraph;
/*=============以下为邻接表的结构描述============*/
typedef struct node /*边结点定义*/
{ int adjvex; /*邻接点域*/
struct node *next; /*指向下一个边结点的指针域*/
}EdgeNode;
typedef struct vnode /*表头结点定义*/
{ Vextype vertex; /*顶点信息*/
EdgeNode *firstedge;
}VertexNode;
typedef struct /*图的邻接表存储*/
{ VertexNode adjlist[VERTEX_MAX];
int n,e; /*顶点数和边数*/
} ALGraph;
/*============以下为创建无向图的邻接矩阵过程=========*/
void creat_MGraph1(MGraph *g)
{ int i,j,k;
int n,m;
printf("请输入顶点数vex和边数arc:"); /*输入顶点数n和边数m*/
scanf("%d,%d",&n,&m);
g->vexnum=n;
g->arcnum=m;
printf("请输入顶点信息:"); /*输入顶点信息,如V0,V1等*/
for (i=0;i<n;i++)
scanf("%s",g->vexs[i]);
for (i=0;i<n;i++) /*初始化邻接矩阵*/
for (j=0;j<n;j++)
g->arcs[i][j]=0;
printf("请输入两个顶点间的边edge(i,j)\n");
for (k=0;k<m;k++) /*根据边的顶点对邻接矩阵进行赋值*/
{
scanf("%d,%d",&i,&j);
g->arcs[i][j]=1;
g->arcs[j][i]=1;
}
}
/*============以下为创建有向图的邻接矩阵过程=========*/
void creat_MGraph2(MGraph *g)
{
int i,j,k;
int n,m;
printf("请输入顶点数vex和边数arc:"); /*输入顶点数n和边数m*/
scanf("%d,%d",&n,&m);
g->vexnum=n;
g->arcnum=m;
printf("请输入顶点信息:"); /*输入顶点信息,如V0,V1等*/
for (i=0;i<n;i++)
scanf("%s",g->vexs[i]);
for (i=0;i<n;i++) /*初始化邻接矩阵*/
for (j=0;j<n;j++)
g->arcs[i][j]=0;
printf("请输入两个顶点间的边edge(i,j)\n");
for (k=0;k<m;k++) /*根据弧的顶点对邻接矩阵进行赋值*/
{
scanf("%d,%d",&i,&j);
g->arcs[i][j]=1;
}
printf("创建成功!\n");
}
/*============以下为创建无向图的邻接表过程=========*/
void CreateALGraph1(ALGraph *G)
{ int i,j,k;
EdgeNode * s,*t;
printf("请输入顶点数vex和边数arc:"); /*输入顶点数n和边数m*/
scanf("%d,%d",&(G->n),&(G->e));
printf("请输入顶点信息:"); /*输入顶点信息,如V0,V1等*/
for (i=0;i<G->n;i++)
{ scanf("%s",&(G->adjlist[i].vertex));
G->adjlist[i].firstedge=NULL; }
printf("请输入两个顶点间的边edge(i,j)\n"); /*请输入边的信息*/
for (k=0;k<G->e;k++) /*建立边表*/
{ scanf("%d,%d",&i,&j);
s=(EdgeNode*)malloc(sizeof(EdgeNode));
s->adjvex=j;
t=(EdgeNode*)malloc(sizeof(EdgeNode));
t->adjvex=i;
s->next=G->adjlist[i].firstedge;
/*前插方法,将边结点s插入到头结点为G->adjlist[i]的单链表中*/
G->adjlist[i].firstedge=s;
t->next=G->adjlist[j].firstedge;
/*前插方法,将边结点t插入到头结点为G->adjlist[j]的单链表中*/
G->adjlist[j].firstedge=t;
}
}/*CreateALGraph1*/
/*============以下为创建有向图的邻接表过程=========*/
void CreateALGraph2(ALGraph *G)
{ int i,j,k;
EdgeNode * s;
printf("请输入定点数vex和边数arc:"); /*输入顶点数n和边数m*/
scanf("%d,%d",&(G->n),&(G->e));
printf("请输入顶点信息:"); /*输入顶点信息,如V0,V1等*/
for (i=0;i<G->n;i++)
{ scanf("%s",&(G->adjlist[i].vertex));
G->adjlist[i].firstedge=NULL;
}
printf("请输入两个顶点间的弧edge<i,j>\n"); /*请输入弧的信息*/
for (k=0;k<G->e;k++) /*建立边表*/
{ scanf("%d,%d",&i,&j);
s=(EdgeNode*)malloc(sizeof(EdgeNode));
s->adjvex=j;
s->next=G->adjlist[i].firstedge; /*前插方法*/
G->adjlist[i].firstedge=s;
}
}/*CreateALGraph*/
void printMG(MGraph *g) /*输出邻接矩阵*/
{
int i,j;
for (i=0;i<g->vexnum;i++)
{for (j=0;j<g->vexnum;j++)
printf(" %d",g->arcs[i][j]);
printf("\n");
}
}
void printALG(ALGraph *g) /*输出邻接表*/
{
int i;
EdgeNode *p;
for (i=0;i<g->n;i++)
{ printf("%s",g->adjlist[i].vertex);
p=g->adjlist[i].firstedge;
while (p)
{
printf("->%d",p->adjvex);
p=p->next;
}
printf("\n");
}
}
void main()
{
MGraph *L;
ALGraph *A;
creat_MGraph1(&L);
CreateALGraph1(&L);
printMG(&L);
creat_MGraph2(&A);
CreateALGraph2(&A);
printALG(&A);
}
运行后出现 ,这是什么原因呢?