数据结构作业系统_第七章答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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? 试利用栈的基本操作编写,按深度优先搜索策略

遍历一个强连通图的非递归形式的算法。算法中不规定具

相关文档
最新文档