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

合集下载
  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 {

V ertexType 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 {

V ertexType 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③试利用栈的基本操作编写,按深度优先搜索策略

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

体的存储结构,而将图Graph看成是一种抽象的数据类型。

实现下列函数:

void Traverse(Graph dig, VertexType v0, void(*visit)(VertexType));

/* Travel the digraph 'dig' with Depth_First Search. */

图以及相关类型、函数和辅助变量定义如下:

Status visited[MAX_VERTEX_NUM];

int LocateVex(Graph g, VertexType v);

VertexType GetVex(Graph g, int i);

int FirstAdjVex(Graph g, int v);

int NextAdjVex(Graph g, int v, int w);

void visit(char v);

Status InitStack(SStack &s);

Status Push(SStack &s, SElemType x);

Status Pop(SStack &s, SElemType &x);

Status StackEmpty(SStack s);

Status GetTop(SStack s, SElemType &e);

void Traverse(Graph dig, V ertexType v0, void (*visit)(VertexType))

{

int i,v,flag;SStack s;VertexType p; //flag来记录某点还有没有邻接点InitStack(s);

相关文档
最新文档