|
|
#2
寒风中的细雨2011-01-05 12:43
程序代码:#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) { (*g) = (MGraph*) malloc (sizeof(MGraph)); 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) { (*g) = (MGraph*) malloc (sizeof(MGraph)); 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) { (*G) = (ALGraph*) malloc (sizeof(ALGraph)); 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) { (*G) = (ALGraph*) malloc (sizeof(ALGraph)); 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 = NULL; ALGraph *A = NULL; creat_MGraph1(&L); // CreateALGraph1(&L); //printMG(&L); printMG(L); // creat_MGraph2(&A); CreateALGraph2(&A); printALG(A); } 只有本站会员才能查看附件,请 登录 |
#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);
}
运行后出现
只有本站会员才能查看附件,请 登录
,这是什么原因呢?
程序代码: