题目7.22:试基于图的深度优先搜索策略写一算法,判别以邻接表方式存储的有向图中是否存在由顶点vi到顶点vj的路径(i≠j)。注意:算法中涉及的图的基本操作必须在此存储结构上实现。
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;
(这里精简了书上的定义)
void DFS(ALGraph G, int i, int j, Status visited[], Status &found)
{
ArcNode *p;
visited[i] = TRUE;
if (i == j)
found = TRUE;
else
{
p = G.vertices[i].firstarc;
while(!found && p != NULL)
{
if(!visited[p->adjvex])
DFS(G, p->adjvex, j, visited, found);
p = p->nextarc;
}
}
}
Status Path(ALGraph G, int i, int j)
{
int m;
Status visited[MAX_VERTEX_NUM];
Status found;
for(m = 1; m <= G.vexnum; m++)
visited[m] = FALSE;
found = FALSE;
DFS(G, i, j, visited, found);
return found;
}
这是我在考研时复习数据结构,老师讲的,记录下来。用的伪代码,方便考试,代码中相关写法都和严蔚敏书上一样。可以上机运行的代码