试基于图的深度优先搜索策略写一算法,判别以邻接表方式存储的有向图中是否存在由顶点vi到顶点vj的路径(i≠j)

	这是原版答案
[题目分析]
引入一变量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;
        
    }                                                   
  • 20
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值