- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
仲恺农业工程学院实验报告纸(院、系)专业班 组课
学号姓名实验日期教师评定实验四 图的建立及应用
一、实验目的1、掌握图的存储思想及其存储实现。2、掌握图的深度、广度优先遍历算法思想及其程序实现。3、理解最小生成树的有关概念以及普里姆算法和克鲁斯卡尔算法的实现。4、理解最短路径、拓朴排序、关键路径算法及实现。
二、实验要求1、 编写程序实现图的各种运算,并在此基础上设计主函数,使其完成如下功能:(1)建立无向图(2)输出无向图对应的邻接表。(3)实现深度遍历和广度遍历。
三、程序运算结果截图四、程序源代码
#includeiostream
#includestdlib.h
using namespace std;
////////////////////////////
#define N 20
typedef char VertexType;
/////////////////////////////////
typedef struct ArcNode
{
int adjdex;
struct ArcNode *next;//图的边界点
}AN;
//////////////////////////////
typedef struct VNode
{
VertexType data;
bool mark;
AN *firstarc;//图的顶点
}VN;
////////////////////////////////
VN G[N];//定义图的顶点
/////////////////////////////////
void Create(int n,VN G[])//创建无向图
{
AN *p,*q;
int i,e;
VertexType d;
coutInput the information of the vertex\n;
for(i=0;in;i++)
{
coutG[i]=;
cind;
G[i].data=d;//初始化图的顶点
G[i].firstarc=NULL;
G[i].mark=false;
}
for(i=0;in;i++)
{
coutCreate the edges fo the G[i]endl;
cine;
while(e!=-1)
{
p=(AN*)malloc(sizeof(AN));
p-next=NULL;
p-adjdex=e;//建立顶点间的关系
if(G[i].firstarc==NULL)
G[i].firstarc=p;
else
q-next=p;
q=p;
cout按 -1 退出,否则继续创建边结点endl;
cine;
}
}
}
//////////////////////////////////
void visit(VN G[],int v)
{
coutG[v]=G[v].dataendl; //访问图的顶点
}
////////////////////////////////////
int FirstAdj(VN G[],int v)
{
if(G[v].firstarc!=NULL)
return G[v].firstarc-adjdex; //查找顶点的第一条边
return -1;
}
//////////////////////////////////
int NextAdj(VN G[],int v)
{
AN *p;
p=G[v].firstarc;
while(p-next!=NULL)
{
if(G[p-next-adjdex].mark==true)//查找顶点的下一条边
p=p-next;
else
return p-next-adjdex;
}
return -1;
}
//////////////////////////////////
void Visit(VN G[],int n)
{
int i,j,w;
for(i=0;in;i++)
G[i].mark=false;
for(i=0;in;i++)
{
coutG[i]:;
w=FirstAdj(G,i);
while(w!=-1)//输出邻接表
{if(G[w].mark==false)coutG[w] ;G[w].mark=true;w=NextAdj(G,i);
}
coutendl;
for(j=0;jn;j++)G[j].mark=false;
}
}
//////////////////////////////////
void DFS(VN G[],int v)
{
int w;
visit(G,v);
G[v].mark=true;
w=FirstAdj(G,v);//深度优
文档评论(0)