数据结构作业系统_第七章答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构作业系统_第七章答案7.22? 试基于图的深度优先搜索策略写一算法,
判别以邻接表方式存储的有向图中是否存在由顶
点vi到顶点vj的路径(i?j)。注意:算法中涉及
的图的基本操作必须在此存储结构上实现。
实现下列函数:
Status DfsReachable(ALGraph g, int i, int j);
/* Judge if it exists a path from vertex 'i' to */
/* vertex 'j' in digraph 'g'. */
/* Array 'visited[]' has been initialed to 'false'.*/ 图的邻接表以及相关类型和辅助变量定义如下:
Status visited[MAX_VERTEX_NUM];
typedef char VertexType;
typedef struct ArcNode {
int adjvex;
struct ArcNode *nextarc;
} ArcNode;
typedef struct VNode {
VertexType data;
ArcNode *firstarc;
} VNode, AdjList[MAX_VERTEX_NUM];
typedef struct {
AdjList vertices;
int vexnum, arcnum;
} ALGraph;
Status DfsReachable(ALGraph g, int i, int j)
/* Judge if it exists a path from vertex 'i' to */
/* vertex 'j' in digraph 'g'. */
/* Array 'visited[]' has been initialed to 'false'.*/ { int k;
ArcNode *p;
visited[i]=1;
for(p=g.vertices[i].firstarc;p;p=p->nextarc)
{
if(p)
{
k=p->adjvex;
if(k==j)return 1;
if(visited[k]!=1)
if(DfsReachable(g,k,j))return 1;
}
}
return 0;
}
7.23? 同7.22题要求。试基于图的广度优先搜索策略写一算法。实现下列函数:
Status BfsReachable(ALGraph g, int i, int j); /* Determine whether it exists path from vertex i to */ /* vertex j in digraph g with Breadth_First Search. */ /* Array 'visited' has been initialed to
'false'. */
图的邻接表以及相关类型和辅助变量定义如下:
Status visited[MAX_VERTEX_NUM];
typedef char VertexType;
typedef struct ArcNode {
int adjvex;
struct ArcNode *nextarc;
} ArcNode;
typedef struct VNode {
VertexType data;
ArcNode *firstarc;
} VNode, AdjList[MAX_VERTEX_NUM];
typedef struct {
AdjList vertices;
int vexnum, arcnum;
} ALGraph;
Status InitQueue(Queue &q);
Status EnQueue(Queue &q, int e);
Status DeQueue(Queue &q, int &e);
Status QueueEmpty(Queue q);
Status GetFront(Queue q, int &e);
Status BfsReachable(ALGraph g, int i, int j) /* Determine whether it exists path from vertex i to */ /* vertex j in digraph g with
Breadth_First Search. */ /* Array 'visited' has been initialed to
'false'. */ {
Queue q;
int k,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)return 1;
if(visited[n]!=1)EnQueue(q,n);
}
}
return 0;
}
7.24? 试利用栈的基本操作编写,按深度优先搜索策略
遍历一个强连通图的非递归形式的算法。算法中不规定具