数据结构 图的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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; 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; i
{
for (j=0; j
G->arcs[i][j].adj=0;
}
for (i=0; i
{
scanf("%d",&G->vexs[i]);
getchar();
}
for (k=0; 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); } 实验总结: 通过该实验的代码编写与调试,熟悉了邻接矩阵在图结构中的应用,将理论转为实际的运行程序,加深了对图的深度遍历算法和广度遍历算法的理解。 图是一种复杂的数据结构,表现在不仅各个顶点的度可以相差很多,而且顶点间的逻辑关系——邻接关系也错综复杂。所以图是必要技能,应多动手练习。