https://github.com/krypt0nn/graph
Граф для PHP 7+
https://github.com/krypt0nn/graph
Last synced: 9 months ago
JSON representation
Граф для PHP 7+
- Host: GitHub
- URL: https://github.com/krypt0nn/graph
- Owner: krypt0nn
- License: other
- Created: 2019-05-18T15:28:53.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2020-01-04T14:02:27.000Z (over 6 years ago)
- Last Synced: 2025-01-06T06:43:36.463Z (over 1 year ago)
- Language: PHP
- Homepage:
- Size: 7.81 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: license.txt
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)