对于两个不同的算法,均采用从顶点i出发,依次遍历每个顶点,直到搜索到顶点j,则说明存在。
int visited[Maxsize]={0};
int Exist_Path_DFS(ALGraph G,int i,int j){
int p;
//有则返回1,没有则返回0
if(i==j){
return 1;
}
else{
visited[i]=1;
for(p=FirstNeighbor(G,i);p>=0;p=NextNeighbor(G,i,p))//检测所有邻接点
{
if(!visited[p]&&Exist_Path_DFS(G,p,j))//递归检测邻接点
{
return 1;
}
}//for
}//if
}
采用广度优先遍历算法
int visited[Maxsize]={0};
int Exist_Path_BFS(ALGraph G,int i,int j){
InitQueue(Q);
EnQueue(Q,i);
while(!isEmpty(Q)){
Dequeue(Q,u);
visited[u]=1;
for(p=FirstNeighbor(G,u);p;p=NextNeighbor(G,u,p))//检测所有邻接点
{
k=p.adjvex;
if(k==j) return 1;
if(visited[k])
EnQueue(Q,k);
}//for
}//while
return 0;
}