An open API service indexing awesome lists of open source software.

https://github.com/krypt0nn/graph

Граф для PHP 7+
https://github.com/krypt0nn/graph

Last synced: 9 months ago
JSON representation

Граф для PHP 7+

Awesome Lists containing this project

README

          

# Graph

**Graph** - структура данных [граф](https://ru.wikipedia.org/wiki/Граф_(математика)) для **PHP** 7+

Для создания графа можно использовать матрицу смежности, список векторов связанных вершин или список готовых вершин графа. Рассмотрим их на примере этого графа

Пример графа из кода ниже

**buildByAdjacencyMatrix**

```php
buildByAdjacencyMatrix ([
'A' => ['A' => null, 'B' => 1, 'C' => 1, 'D' => 3],
'B' => ['A' => 1, 'B' => null, 'C' => null, 'D' => 2],
'C' => ['A' => 1, 'B' => null, 'C' => null, 'D' => 2],
'D' => ['A' => 3, 'B' => 2, 'C' => 2, 'D' => null]
]);
```

**buildByVectorsList**

```php
buildByVectorsList ([
'A' => ['B' => 1, 'C' => 1, 'D' => 3],
'B' => ['A' => 1, 'D' => 2],
'C' => ['A' => 1, 'D' => 2],
'D' => ['A' => 3, 'B' => 2, 'C' => 2]
]);
```

**buildByNodesList**

```php
buildByNodesList ([
$nodes[0]->link ($nodes[1], 1)->link ($nodes[2], 1)->link ($nodes[3], 3),
$nodes[1]->link ($nodes[0], 1)->link ($nodes[3], 2),
$nodes[2]->link ($nodes[0], 1)->link ($nodes[3], 2),
$nodes[3]->link ($nodes[0], 3)->link ($nodes[1], 2)->link ($nodes[2], 2)
]);
```

Для графов доступны:

* просчёт кратчайших дистанций между вершинами
* поиск клик
* поиск циклов
* проход по графу *(**DFS**)*
* конвертация в различные способы представления

Дистанции между вершинами:

```php
countHipsDistances (true));
```

Клики:

```php
findCliques ());
```

Циклы:

```php
buildByVectorsList ([
'A' => ['B' => 1],
'B' => ['C' => 1],
'C' => ['D' => 1],
'D' => ['B' => 1]
]);

// Выведет список подграфов-циклов:
// B -> C -> D -> B
// C -> D -> B -> C
// D -> B -> C -> D

print_r ($graph->findCycles ());
```

> Граф из примера выше:
Граф из примера выше

Ну, как-то так

Автор: [Подвирный Никита](https://vk.com/technomindlp). Специально для [Enfesto Studio Group](http://vk.com/hphp_convertation)