数据结构作业系统第七章答案.docx
- 文档编号:1426356
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:14
- 大小:153.56KB
数据结构作业系统第七章答案.docx
《数据结构作业系统第七章答案.docx》由会员分享,可在线阅读,更多相关《数据结构作业系统第七章答案.docx(14页珍藏版)》请在冰豆网上搜索。
数据结构作业系统第七章答案
数据结构作业系统_第七章答案
7.22③试基于图的深度优先搜索策略写一算法,
判别以邻接表方式存储的有向图中是否存在由顶
点vi到顶点vj的路径(i≠j)。
注意:
算法中涉及
的图的基本操作必须在此存储结构上实现。
实现下列函数:
StatusDfsReachable(ALGraphg,inti,intj);
/*Judgeifitexistsapathfromvertex'i'to*/
/*vertex'j'indigraph'g'.*/
/*Array'visited[]'hasbeeninitialedto'false'.*/
图的邻接表以及相关类型和辅助变量定义如下:
Statusvisited[MAX_VERTEX_NUM];
typedefcharVertexType;
typedefstructArcNode{
intadjvex;
structArcNode*nextarc;
}ArcNode;
typedefstructVNode{
VertexTypedata;
ArcNode*firstarc;
}VNode,AdjList[MAX_VERTEX_NUM];
typedefstruct{
AdjListvertices;
intvexnum,arcnum;
}ALGraph;
StatusDfsReachable(ALGraphg,inti,intj)
/*Judgeifitexistsapathfromvertex'i'to*/
/*vertex'j'indigraph'g'.*/
/*Array'visited[]'hasbeeninitialedto'false'.*/
{
intk;
ArcNode*p;
visited[i]=1;
for(p=g.vertices[i].firstarc;p;p=p->nextarc)
{
if(p)
{
k=p->adjvex;
if(k==j)return1;
if(visited[k]!
=1)
if(DfsReachable(g,k,j))return1;
}
}
return0;
}
7.23③同7.22题要求。
试基于图的广度优先搜索策略写一算法。
实现下列函数:
StatusBfsReachable(ALGraphg,inti,intj);
/*Determinewhetheritexistspathfromvertexito*/
/*vertexjindigraphgwithBreadth_FirstSearch.*/
/*Array'visited'hasbeeninitialedto'false'.*/
图的邻接表以及相关类型和辅助变量定义如下:
Statusvisited[MAX_VERTEX_NUM];
typedefcharVertexType;
typedefstructArcNode{
intadjvex;
structArcNode*nextarc;
}ArcNode;
typedefstructVNode{
VertexTypedata;
ArcNode*firstarc;
}VNode,AdjList[MAX_VERTEX_NUM];
typedefstruct{
AdjListvertices;
intvexnum,arcnum;
}ALGraph;
StatusInitQueue(Queue&q);
StatusEnQueue(Queue&q,inte);
StatusDeQueue(Queue&q,int&e);
StatusQueueEmpty(Queueq);
StatusGetFront(Queueq,int&e);
StatusBfsReachable(ALGraphg,inti,intj)
/*Determinewhetheritexistspathfromvertexito*/
/*vertexjindigraphgwithBreadth_FirstSearch.*/
/*Array'visited'hasbeeninitialedto'false'.*/
{
Queueq;
intk,n;
ArcNode*p;
InitQueue(q);
EnQueue(q,i);
while(!
QueueEmpty(q))
{
DeQueue(q,k);
visited[k]=1;
for(p=g.vertices[k].firstarc;p;p=p->nextarc)
{
n=p->adjvex;
if(n==j)return1;
if(visited[n]!
=1)EnQueue(q,n);
}
}
return0;
}
7.24③试利用栈的基本操作编写,按深度优先搜索策略
遍历一个强连通图的非递归形式的算法。
算法中不规定具
体的存储结构,而将图Graph看成是一种抽象的数据类型。
实现下列函数:
voidTraverse(Graphdig,VertexTypev0,void(*visit)(VertexType));
/*Travelthedigraph'dig'withDepth_FirstSearch.*/
图以及相关类型、函数和辅助变量定义如下:
Statusvisited[MAX_VERTEX_NUM];
intLocateVex(Graphg,VertexTypev);
VertexTypeGetVex(Graphg,inti);
intFirstAdjVex(Graphg,intv);
intNextAdjVex(Graphg,intv,intw);
voidvisit(charv);
StatusInitStack(SStack&s);
StatusPush(SStack&s,SElemTypex);
StatusPop(SStack&s,SElemType&x);
StatusStackEmpty(SStacks);
StatusGetTop(SStacks,SElemType&e);
voidTraverse(Graphdig,VertexTypev0,void(*visit)(VertexType))
{
inti,v,flag;SStacks;VertexTypep;//flag来记录某点还有没有邻接点
InitStack(s);
if(dig.vexnum&&dig.arcnum)
{i=LocateVex(dig,v0);visited[i]=TRUE;visit(v0);Push(s,v0);
while(!
StackEmpty(s))
{GetTop(s,p);v=LocateVex(dig,p);flag=0;
for(i=FirstAdjVex(dig,v);i>=0;i=NextAdjVex(dig,v,i))
{if(!
visited[i]){p=GetVex(dig,i);flag=1;break;}}
if(flag)
{visit(p);visited[i]=TRUE;
Push(s,p);
}
else{Pop(s,p);}
}
}
}
7.27④采用邻接表存储结构,编写一个判别无向图中任意给定的
两个顶点之间是否存在一条长度为k的简单路径的算法。
实现下列函数:
StatusSinglePath(ALGraphg,VertexTypesv,VertexTypetv,
intk,char*sp);
/*Judgewhetheritexistsapathfromsvtotvwithlengthk*/
/*ingraphg,returnpathusingstringspifexists.*/
图的邻接表以及相关类型、函数和辅助变量定义如下:
Statusvisited[MAX_VERTEX_NUM];
typedefcharStrARR[100][MAX_VERTEX_NUM+1];
typedefcharVertexType;
typedefstructArcNode{
intadjvex;
structArcNode*nextarc;
}ArcNode;
typedefstructVNode{
VertexTypedata;
ArcNode*firstarc;
}VNode,AdjList[MAX_VERTEX_NUM];
typedefstruct{
AdjListvertices;
intvexnum,arcnum;
}ALGraph;
intLocateVex(Graphg,VertexTypev);
voidinpath(char*&path,VertexTypev);
/*Addvertex'v'to'path'*/
voiddepath(char*&path,VertexTypev);
/*Removevertex'v'from'path'*/
StatusSinglePath(ALGraphg,VertexTypesv,VertexTypetv,intk,char*sp)
/*Judgewhetheritexistsapathfromsvtotvwithlengthk*/
/*ingraphg,returnpathusingstringspifexists.*/
{inti,j,l;
ArcNode*p;
if(sv==tv&&k==0)
{inpath(sp,tv);
returnOK;}
else
{
i=LocateVex(g,sv);
visited[i]=1;
inpath(sp,sv);
for(p=g.vertices[i].firstarc;p;p=p->nextarc)
{
l=p->adjvex;
if(!
visited[l])
{
if(SinglePath(g,g.vertices[l].data,tv,k-1,sp))
returnOK;
else
depath(sp,g.vertices[l].data);
}
}
visited[i]=0;
}
}
7.28⑤已知有向图和图中两个顶点u和v,试编写算法求
有向图中从u到v的所有简单路径。
实现下列函数:
voidAllPath(ALGraphg,VertexTypesv,VertexTypetv,
StrARR&path,int&i);
/*
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 作业 系统 第七 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)