[prev] 16 [next]

Depth-first Search (cont)

visited[] // store previously visited node, for each vertex 0..nV-1

findPath(G,src,dest):
|  Input graph G, vertices src,dest
|
|  for all vertices v∈G do
|     visited[v]=-1
|  end for
|  visited[src]=src                  // starting node of the path
|  if dfsPathCheck(G,src,dest) then  // show path in dest..src order
|  |  v=dest
|  |  while v≠src do
|  |     print v"-"
|  |     v=visited[v]
|  |  end while
|  |  print src
|  end if

dfsPathCheck(G,v,dest):
|  for all (v,w)∈edges(G) do
|  |  if visited[w]=-1 then
|  |     visited[w]=v
|  |     if w=dest then              // found edge from v to dest
|  |        return true
|  |     else if dfsPathCheck(G,w,dest) then
|  |        return true              // found path via w to dest
|  |     end if
|  |  end if
|  end for
|  return false                      // no path from v to dest