/**
  * A subgraph is calculated based on the participants collected based on the given node ids.
  *
  * @param array $ids
  *   The nodes interested in.
  * @return DirectedGraph
  *   The subgraph with all participants
  */
 public function subGraph($ids = array())
 {
     $g = new DirectedGraph();
     $participants = $this->getParticipants($ids);
     foreach ($participants as $id) {
         $g->addNode($id);
         // Only participating links are added.
         $links = $this->getLinks($id);
         if (is_array($links)) {
             $g->addLinks($id, array_intersect($participants, $links));
         }
     }
     return $g;
 }
 /**
  * Converts a DirectedGraph into a DirectedAcyclicGraph.
  *
  * A DirectedGraph can be converted into a DirectedAcyclicGraph when
  * is does not contain any cycle.
  *
  * @param \GraphAPI\Component\Graph\DirectedGraph $g
  * @param type $ignore_exception
  * @throws \GraphAPI\Component\Graph\Exception
  */
 static function fromDirectedGraph(DirectedGraph $g, $ignore_exception = FALSE)
 {
     $d = new DirectedAcyclicGraph();
     foreach ($g->getNodeIds() as $id) {
         $links = $g->getLinks($id);
         foreach ($links as $link) {
             try {
                 $d->addLink($id, $link);
             } catch (\Exception $exc) {
                 if (!$ignore_exception) {
                     throw $exc;
                 }
             }
         }
     }
     return $d;
 }
function dumpReverse(DirectedGraph $g)
{
    echo "\nReversed: " . $g->getReversedGraph() . "\n";
}