Esempio n. 1
0
 /**
  * @param Vertex $vertex
  * @return Walk
  */
 protected function getWalkForVertex(Vertex $vertex)
 {
     if ($vertex->getId() == $this->graph->getRoot()) {
         return Walk::factoryFromEdges([], $vertex);
     } else {
         $shortestPath = new BreadthFirst($vertex);
         return $shortestPath->getWalkTo($this->vertices->getVertexLast());
     }
 }
Esempio n. 2
0
 public function testWalkLoop()
 {
     // 1 -- 1
     $graph = new Graph();
     $v1 = $graph->createVertex(1);
     $e1 = $v1->createEdge($v1);
     $walk = Walk::factoryFromEdges(array($e1), $v1);
     $this->assertEquals(2, count($walk->getVertices()));
     $this->assertEquals(1, count($walk->getEdges()));
     $this->assertSame($v1, $walk->getVertices()->getVertexFirst());
     $this->assertSame($v1, $walk->getVertices()->getVertexLast());
     $this->assertTrue($walk->isValid());
     return $walk;
 }
Esempio n. 3
0
File: Base.php Progetto: feffi/graph
 /**
  * get walk (path) from start vertex to given end vertex
  *
  * @param  Vertex    $endVertex
  * @return Walk
  * @throws OutOfBoundsException if there's no path to the given end vertex
  * @uses self::getEdgesTo()
  * @uses Walk::factoryFromEdges()
  */
 public function getWalkTo(Vertex $endVertex)
 {
     return Walk::factoryFromEdges($this->getEdgesTo($endVertex), $this->vertex);
 }
Esempio n. 4
0
 public function testSimplePathWithinGraph()
 {
     // 1 -- 2 -- 2
     $graph = new Graph();
     $v1 = $graph->createVertex(1);
     $v2 = $graph->createVertex(2);
     $e1 = $v1->createEdge($v2);
     $e2 = $v2->createEdge($v2);
     // only use "2 -- 2" part
     $walk = Walk::factoryFromEdges(array($e2), $v2);
     $this->assertEquals(2, count($walk->getVertices()));
     $this->assertEquals(1, count($walk->getEdges()));
     $alg = new WalkProperty($walk);
     $this->assertTrue($alg->isCycle());
     $this->assertTrue($alg->hasCycle());
     $this->assertTrue($alg->isPath());
     $this->assertTrue($alg->isSimple());
     $this->assertFalse($alg->isEulerian());
     $this->assertFalse($alg->isHamiltonian());
 }