/** * @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()); } }
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; }
/** * 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); }
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()); }