您好,欢迎来到爱够旅游网。
搜索
您的当前位置:首页实验8 图的基本知识

实验8 图的基本知识

来源:爱够旅游网
实验8 图的基本知识

实验目的:

1、了解图的概念 2、掌握图的各种属性

3、掌握图的深度和广度遍历

实验内容:

1、在给定的头文件cg.h(实现的是无向图和有向图的邻接矩阵和邻接表的生成)的基础上实现如下功能:统计有向图的出度,入度和度。 #include \"stdio.h\" #include \"malloc.h\"

#define VERTEX_MAX 30 /*最大顶点数*/ #define MAXSIZE 20

/*============以下为邻接矩阵的结构描述============*/ 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_MGraph2(MGraph *g) {

int i,j,k; int n,m;

printf(\"以下是邻接矩阵操作,请输入顶点数vex和边数arc:\"); /*入顶点数n和边数m*/

scanf(\"%d,%d\ g->vexnum=n;

输 g->arcnum=m;

printf(\"请输入顶点信息:\"); /*输入顶点信息,如V0,V1等*/ for (i=0;iscanf(\"%s\

for (i=0;iarcs[i][j]=0;

printf(\"请输入两个顶点间的边edge(i,j)\\n\");

for (k=0;kscanf(\"%d,%d\ g->arcs[i][j]=1; }

printf(\"创建成功!\\n\"); }

/*============以下为创建有向图的邻接表过程=========*/ void CreateALGraph2(ALGraph *G) { int i,j,k; EdgeNode * s;

printf(\"以下是邻接表操作:请输入顶点数vex和边数arc,如3,3:\"); /*输入顶点数n和边数m*/

scanf(\"%d,%d\

printf(\"请输入顶点信息,如V0回车V1等:\"); /*输入顶点信息,如V0,V1等*/

for (i=0;in;i++)

{ scanf(\"%s\ G->adjlist[i].firstedge=NULL; }

printf(\"请输入两个顶点间的弧edge如0,1\\n\"); /*请输入弧的信息*/

for (k=0;ke;k++) /*建立边表*/ { scanf(\"%d,%d\

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;ivexnum;i++) {for (j=0;jvexnum;j++)

printf(\" %d\

printf(\"\\n\"); } }

void printALG(ALGraph *g) /*输出邻接表*/ {

int i,j;

EdgeNode *p;

for (i=0;in;i++)

{ printf(\"%s\ p=g->adjlist[i].firstedge; while (p) {

printf(\"->%d\ p=p->next; }

printf(\"\\n\"); } }

void f_ind(ALGraph *G) //此函数为实现利用邻接表统计出度,入度和总度 {

int i;

int ind[VERTEX_MAX]={0}; int outd[VERTEX_MAX]={0}; int totald[VERTEX_MAX]={0};

/*3个变量分别为入度、出度和总度数*/ EdgeNode *p;

for (i=0;in;i++) /*求出度和入度*/ {

p=G->adjlist[i].firstedge; while (p!=NULL) {

ind[p->adjvex]++; outd[i]++; p=p->next; } }

for (i=0;in;i++) {

totald[i]=ind[i]+outd[i];//求总度 }

printf(\"顶点 入度 出度 度:\\n\"); for(i=0;in;i++) {

printf(\"%s %d %d %d\\notald[i]); } }

void h_ind(MGraph *G) //此函数为实现利用邻接矩阵统计出度,入度和总度 {

int i,j;

int ind[VERTEX_MAX]={0}; int outd[VERTEX_MAX]={0};

int totald[VERTEX_MAX]={0};

/*3个变量分别为入度、出度和总度数*/

for (____________i=0;ivexnum;i++_________) /*求出度和入度*/ {

for(_______j=0;jvexnum;j++_______________) {

if(G->arcs[i][j]==1) {

ind[j]++; outd[i]++; } } }

for (i=0;ivexnum;i++) {

____totald[i]=ind[i]+outd[i]; __;//求总度 }

printf(\"顶点 入度 出度 度:\\n\"); for(i=0;ivexnum;i++) {

printf(\"%s %d %d %d\\n\; } }

int main() {

int i,j; ALGraph *g; EdgeNode *p;

g=(ALGraph *)malloc(sizeof(ALGraph)); CreateALGraph2(g);

printALG(g); f_ind(g);

MGraph *h;

h=(MGraph *)malloc(sizeof(MGraph)); creat_MGraph2(h); printMG(h); h_ind(h); }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务