首页 > 试题广场 >

试写一算法,判断以邻接表方式存储的有向图中是否存在由顶点Vi

[问答题]

试写一算法,判断以邻接表方式存储的有向图中是否存在由顶点Vi到顶点Vj的路径(i<>j)。注意:算法中涉及的图的基本操作必须在存储结构上实现。

在有向图中,判断顶点Vi和顶点Vj间是否有路径,可采用遍历的方法,从顶点Vi出发,不论是深度优先遍历(dfs)还是宽度优先遍历(bfs),在未退出dfsbfs,若访问到Vj,则说明有通路,否则无通路。设一全程变量flag。初始化为0,若有通路,则flag=1

算法 int visited[]=0;  //全局变量,访问数组初始化

int dfs(AdjList g , vi)

// 以邻接表为存储结构的有向图g,判断顶点ViVj是否有通路,返回10表示有或无

{ visited[vi]=1;   //visited 是访问数组,设顶点的信息就是顶点编号。

p=g[vi].firstarc;  // 第一个邻接点。

while ( p!=null)

{ j=p->adjvex;

if (vj==j) { flag=1; return 1;} //vi vj 有通路。

if (visited[j]==0) dfs(g,j);

p=p->next }//while

if (!flag) return(0);

}// 结束

发表于 2017-05-07 09:22:25 回复(0)