コード例 #1
0
ファイル: DegreeTest.php プロジェクト: feffi/graph
 public function testGraphIrregular()
 {
     // 1 -> 2 -> 3
     $graph = new Graph();
     $v1 = $graph->createVertex(1);
     $v2 = $graph->createVertex(2);
     $v3 = $graph->createVertex(3);
     $v1->createEdgeTo($v2);
     $v2->createEdgeTo($v3);
     $alg = new AlgorithmDegree($graph);
     try {
         $this->assertEquals(0, $alg->getDegree());
         $this->fail();
     } catch (UnexpectedValueException $e) {
     }
     $this->assertEquals(1, $alg->getDegreeMin());
     $this->assertEquals(2, $alg->getDegreeMax());
     $this->assertFalse($alg->isRegular());
     $this->assertFalse($alg->isBalanced());
     $this->assertEquals(0, $alg->getDegreeInVertex($v1));
     $this->assertEquals(1, $alg->getDegreeOutVertex($v1));
     $this->assertEquals(1, $alg->getDegreeVertex($v1));
     $this->assertFalse($alg->isVertexIsolated($v1));
     $this->assertFalse($alg->isVertexSink($v1));
     $this->assertTrue($alg->isVertexSource($v1));
     $this->assertEquals(1, $alg->getDegreeInVertex($v2));
     $this->assertEquals(1, $alg->getDegreeOutVertex($v2));
     $this->assertEquals(2, $alg->getDegreeVertex($v2));
     $this->assertFalse($alg->isVertexIsolated($v2));
     $this->assertFalse($alg->isVertexSink($v2));
     $this->assertFalse($alg->isVertexSource($v2));
     $this->assertEquals(1, $alg->getDegreeInVertex($v3));
     $this->assertEquals(0, $alg->getDegreeOutVertex($v3));
     $this->assertEquals(1, $alg->getDegreeVertex($v3));
     $this->assertFalse($alg->isVertexIsolated($v3));
     $this->assertTrue($alg->isVertexSink($v3));
     $this->assertFalse($alg->isVertexSource($v3));
 }
コード例 #2
0
ファイル: Eulerian.php プロジェクト: feffi/graph
 /**
  * check whether this graph has an eulerian cycle
  *
  * @return boolean
  * @uses ConnectedComponents::isSingle()
  * @uses Degree::getDegreeVertex()
  * @todo isolated vertices should be ignored
  * @todo definition is only valid for undirected graphs
  */
 public function hasCycle()
 {
     $components = new ConnectedComponents($this->graph);
     if ($components->isSingle()) {
         $alg = new Degree($this->graph);
         foreach ($this->graph->getVertices() as $vertex) {
             // uneven degree => fail
             if ($alg->getDegreeVertex($vertex) & 1) {
                 return false;
             }
         }
         return true;
     }
     return false;
 }