有向图中两个结点之间是否存在一条路径

给定有向图,设计一个算法,找出两个结点之间是否存在一条路径

有向图中两个结点之间是否存在一条路径_第1张图片

public enum State
{
Unvisited,Visited,Visiting;
}
public  static boolean search(Graph g,Node start ,NLinkedList {
//当作队列使用
LinkedList q=new LinkedList();
for(Node u:g.getNodes())
{
u.state=State.Unvisited;
}
start.state=State.Visiting;
q.add(start);
Node u;
while(!q.isEmpty())
{
u=q.removeFirst();//也即dequeue()
if(u!=null)
{
for(Node v:u.getAdjacent())
{
if(v.state==State.Unvisited)
{
  if(v==end)
  return true;
  else
  {
  v.state=State.Visiting;
  q.add(v);
  }
}
}
u.state=State.Visited;
}
}
return false;
}

注:也可以使用深度优先,深度优先搜索实现起来比较简单,因为只需简单的递归即可。广度优先搜索很适合用来查找最短路径,而深度优先搜索在访问邻近结点之前,可能会先深度遍历其中一个邻近结点。



你可能感兴趣的:(程序员面试金典第5版)