// Chap 6, pp 289 - 290

boolean IsPath(int OriginCity, int DestCity, mapClass M)
// -----------------------------------------------------
// Determines whether a sequence of flights between two
// cities exists. Nonrecursive stack version.
// Precondition: OriginCity and DestCity are the city
// numbers of the origin and destination cities,
// respectively. M is the flight map.
// Postcondition: Returns TRUE if a sequence of flights
// exists from OriginCity to DestCity, otherwise returns
// FALSE. Arguments are unchanged.
// Calls: Stack operations, UnvisitAll, MarkVisited,
// and GetNextCity.
// Implementation note: Uses a stack S for the city
// numbers of a potential path.
// -----------------------------------------------------
{
   stackClass S;
   int        TopCity, NextCity;
   boolean    Success;

   M.UnvisitAll();  // clear marks on all cities

   // push origin city onto stack, mark it visited
   S.Push(OriginCity, Success);
   M.MarkVisited(OriginCity);

   S.GetStackTop(TopCity, Success);
   while ( !S.StackIsEmpty() && (TopCity != DestCity) )
   {  // loop invariant: stack S contains a directed path
      // from the origin city at the bottom of S to the
      // city at the top of S

      // find an unvisited city adjacent to the city on the
      // top of the stack
      M.GetNextCity(TopCity, NextCity, Success);

      if (!Success)
	 S.Pop(Success);  // no city found; backtrack

      else                // visit city
      {  S.Push(NextCity, Success);
	 M.MarkVisited(NextCity);
      }  // end if

      S.GetStackTop(TopCity, Success);
   }  // end while

   if (S.StackIsEmpty())
      return FALSE;  // no path exists
   else
      return TRUE;   // path exists
}  // end IsPath

    Source: geocities.com/siliconvalley/program/2864/ds/CHAP6

               ( geocities.com/siliconvalley/program/2864/ds)                   ( geocities.com/siliconvalley/program/2864)                   ( geocities.com/siliconvalley/program)                   ( geocities.com/siliconvalley)