- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图基本操作实验报告 [2)
图的基本操作实验报告
P向禹
题目要求及其分析
建立一个图,将图进行初始化,通过输入图的结点信息构建图的邻接链表,对图的结构进行深度和广度优先遍历,由此构建图的最小生成树。
要求:输入图的各个结点信息建立图的邻接链表,以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列,同时以用户指定的结点为起点,分别利用普利姆算法和克鲁斯卡尔算法求图的最小生成树。
设计概要
首先根据图的存储结构定义图的链表结构(包括顶点关系类型,与弧或边相关的信息,指向下一个结点的指针,图的当前顶点数与边数邻接矩阵等),采用二维数组形式存储图的邻接矩阵,以邻接表来作为图的链式存储结构,每个结点由邻接点域,链域和数据域组成,由此可构造图G。
图的深度优先遍历:从某个顶点v出发访问,然后依次从v的未被访问的邻接点出发深度优先遍历图,直到所有与v相邻的顶点都被访问到,若途中尚有顶点未被访问,则另选途中一个未被访问的电作为起始点,重复上述过程直到所有顶点被访问到。
图的广度优先遍历:从v出发,依次访问v和v的未被访问的邻接点,然后从这些邻接点出发访问它们的邻接点,直到所有已被访问的顶点的邻接点都被访问到,若尚有未被访问到的顶点,则选取一个顶点重复上述步骤,直到所有顶点被访问到。
最小生成树:假设联通网N=(V,{E}),则令最小生成树的初始状态为只有n个顶点而无边的非连通图T=(V,{}),图中每个分量自成一个连通分量。在E中选择代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中,否则社区此边额选择下一条代价最小的边。依次类推,直至T中所有顶点都在同一连通分量上为止。
3.详细设计(主要算法步骤描述)
typedef struct ArcCell{ //VRtype是顶点关系类型,对无权图,用1或0
VRType adj; //表示相邻否;对带权图,则为权值类型
InfoType *info; //该弧相关信息的指针
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct{
VertexType vexs[MAX_VERTEX_NUM]; //顶点向量
AdjMatrix arcs; //邻接矩阵
int vexnum,arcnum; //图的当前顶点输和弧数
GraghKind kind; //图的种类标志
}Mgragh;
Status CreateUDN(Mgragh G){ //采用数组(邻接矩阵)表示法,构造无向网G
scanf(G.vexnum,G.arcnum,IncInfo); //IncInfo为0则各弧不含其它信息
for(i=0;iG.vexnum;++i); //初始化邻接矩阵
for(j=0;jG.vexnum;++j) G.arcs[i][j]={INFINITY,NULL};//{adj,info}
for(k=0;kG.arcnum;++K){ //构造邻接矩阵
scanf(v1,v2,w); //输入一条边依附的顶点及权值
i=LocateVex(G,v1);j= LocateVex(G,v2); //确定v1,v2在G中的位置
G.arc[i][j].adj=w; // 弧v1,v2的权值
if(IncInfo)Input(*G.arcs[i][j].info); //若弧含有相关信息,则输入
G.arcs[j][i]=G.arcs[i][j];
}
return OK;
}
typedef struct Arcnode{
int adjvex; //该弧指向的顶点位置
struct *nextarc; //指向下一条弧的指针
INfoType *info; //该弧相关信息的指针
}Arcnode;
文档评论(0)