我正在尝试实现一个函数 pathExists
,它接收图形ADT 'g'作为输入,以及两个顶点 a
和 b
. 如果两个顶点之间存在路径,则函数返回1,否则返回0. I 'm unsure how exactly to do this. I' ve实现了深度优先搜索(DFS)算法,其下方将生成 int *visited
,该数组包含访问节点的顺序 . 我只是想知道如何使用这个算法来实际编写 pathExists
函数 . 谢谢!
编辑:尝试 -
void dfsR(Graph g, int v);
int *visited; // array of visited
int order;
int PathExists(Graph g, int src, int dest)
{
int i;
order = 1;
visited = malloc(sizeof(int)*g->nV);
for(i=0; i<g->nV; i++){
visited[i] = -1;
}
dfsR(g, src);
int connected = 0;
if(visited[dest]!=-1){
connected = 1;
}
return connected;
}
void dfsR(Graph g, int v){
visited[v] = order++;
int w;
for(w=0; w<g->nV; w++){
if(!hasEdge(g, v,w)){
continue;
}
if(!visited[w]){
dfsR(g, w);
}
}
}
1 回答
我会建议这个更快的解决方案 . 第一个提示是为了避免浪费时间,如果您已经访问过目标节点,或者距离目标节点只有一步之遥 . 第二个提示是使用尽可能少的全局变量(作为一般规则) . 因此,我提出的解决方案如下: