这是原版答案
[题目分析]
引入一变量level来控制递归进行的层数
[算法描述]
int visited[MAXSIZE]; //指示顶点是否在当前路径上
int level=1;//递归进行的层数
bool exist_path_DFS(ALGraph G,int i,int j)//深度优先判断有向图G中顶点i到顶点j
{
if(i==j) return 1; //i就是j
else
{
visited[i]=true;
for(p=G.vertices[i].firstarc;p!=NULL;p=p->nextarc,level--)
{
level++;
k=p->adjvex;
if(!visited[k]&&exist_path_DFS(G,k,j)) return true;//i下游的顶点到j有路径
}//for
}//else
if (level==1) return false;
}//exist_path_DFS
第二种答案
int visited[MAXSIZE]; //指示顶点是否在当前路径上
bool exist_path_DFS(ALGraph G,int i,int j)//深度优先判断有向图G中顶点i到顶点j
是否有路径,是则返回1,否则返回0
{
if(i==j) return 1; //i就是j
else
{
visited[i]=true;
for(p=G.vertices[i].firstarc;p!=NULL;p=p->nextarc,level--)
{
k=p->adjvex;
if(!visited[k]&&exist_path_DFS(D,k,j)) return true;//i下游的顶点到j有路径
}//for
}//else
return false;
}//exist_path_DFS
这是广度遍历版本
Status DfsReachable(ALGraph g, int i, int j)
{
ArcNode *p;
Queue Q;
int e,k;
InitQueue(Q);
EnQueue(Q,i);
while(!QueueEmpty(Q)){
DeQueue(Q,e);
visited[e] = TRUE;//标记被访问过的顶点
p = g.vertices[e].firstarc;
for(; p != NULL; p = p -> nextarc){
k = p -> adjvex;//当前弧所指向顶点的位置
if(k == j)
return OK;
else if(!visited[k])//当前顶点未被访问过
EnQueue(Q,k);
}
}
return ERROR;
}