programming-examples/php/Algo/BreadthFirst.php
2019-11-15 12:59:38 +01:00

46 lines
1.1 KiB
PHP

<?php
namespace Graphp\Algorithms\Search;
use Fhaculty\Graph\Vertex;
use Fhaculty\Graph\Graph;
use Fhaculty\Graph\Set\Vertices;
class BreadthFirst extends Base1
{
/**
*
* @return Vertices
*/
public function getVertices()
{
$queue = array($this->vertex);
// to not add vertices twice in array visited
$mark = array($this->vertex->getId() => true);
// visited vertices
$visited = array();
do {
// get first from queue
$t = array_shift($queue);
// save as visited
$visited[$t->getId()]= $t;
// get next vertices
foreach ($this->getVerticesAdjacent($t)->getMap() as $id => $vertex) {
// if not "touched" before
if (!isset($mark[$id])) {
// add to queue
$queue[] = $vertex;
// and mark
$mark[$id] = true;
}
}
// untill queue is empty
} while ($queue);
return new Vertices($visited);
}
}