数据结构 图的应用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

洛阳理工学院实验报告

系别计算机与信

息工程学院班级B170432 学号B17043233 姓名邓志颖

课程名称数据结构实验日期2017.12.22 实验名称图成绩

实验条件:

1.Win7操作系统+VC6.0

2.PC机一台

实验目的:

1、掌握图的逻辑结构。

2、掌握图的邻接矩阵存储结构。

3、验证图的邻接矩阵存储及其遍历操作的实现。

实验内容(写出程序代码与实验结果截图):

1.建立无向树的邻接矩阵存储,并计算第i个顶点的度,并输出。

#include

#define MAX_VERTEX_NUM 10//最多顶点个数

#define Error 0

#define OK 1

typedef enum {

DG, DN, UDG, UDN

} Graphkind;

//表示图的种类依次是有向图,有向网,无向图,无向网

typedef int Vertexdata;

typedef struct Arcnode {

int adj;//对于无权图,用1或0表示是否相邻,对带权图,则为权值类型

int info;

} Arcnode;

typedef struct {

Vertexdata vexs[MAX_VERTEX_NUM];//顶点向量

Arcnode arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//邻接矩阵

int vexnum, arcnum;//图的顶点数和弧数

Graphkind kind;//图的种类标志

} Adjmatrix;

int Locatevertex(Adjmatrix *G,Vertexdata v) { //求顶点位置函数int j=Error,k;

for(k=0; kvexnum; k++) {

if(G->vexs[k]==v) {

j=k;

break;

}

}

return(j);

}

int CreateUDG(Adjmatrix *G)

{

int i,j,k;

Vertexdata v1,v2;

printf("输入图的顶点数和边数:");

scanf("%d,%d",&G->vexnum,&G->arcnum);

printf("输入图的顶点信息:");

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

{

for (j=0; jvexnum; j++)

G->arcs[i][j].adj=0;

}

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

{

scanf("%d",&G->vexs[i]);

getchar();

}

for (k=0; karcnum; k++)

{

scanf("%d,%d",&v1,&v2);

i=Locatevertex(G,v1);

j=Locatevertex(G,v2);

G->arcs[i][j].adj=1;

G->arcs[j][i]=G->arcs[i][j];

}

return OK;

}

int TD(Adjmatrix G) //度数

{

int i,j,k;

int v1=0,v2=0;

for(i=0; i

{

k=0;

for(j=0; j

{

if(G.arcs[i][j].adj==1)

{

k++;

}

}

printf("第%d个顶点即%d的度为:%d\n",i+1,G.vexs[i],k);

}

return OK;

}

void main()

{

Adjmatrix G;

CreateUDG(&G);

TD(G);

}

实验总结:

通过该实验的代码编写与调试,熟悉了邻接矩阵在图结构中的应用,将理论转为实际的运行程序,加深了对图的深度遍历算法和广度遍历算法的理解。

图是一种复杂的数据结构,表现在不仅各个顶点的度可以相差很多,而且顶点间的逻辑关系——邻接关系也错综复杂。所以图是必要技能,应多动手练习。

相关文档
最新文档