hoa/graph

此包已被废弃,不再维护。未建议替换包。

Hoa\Graph 库。

1.17.01.13 2017-01-13 15:26 UTC

README

Hoa

Build status Code coverage Packagist License

Hoa 是一组 模块化可扩展结构化 的 PHP 库。
此外,Hoa 致力于成为工业界和研究界之间的桥梁。

Hoa\Graph

Help on IRC Help on Gitter Documentation Board

这个库允许创建和操作有向图,这是一种常见的数据结构。有向图基本上是一组顶点(又称节点)和顶点之间的有向边。

了解更多.

安装

使用 Composer,要将此库包含到依赖项中,您需要要求 hoa/graph

$ composer require hoa/graph '~1.0'

有关更多安装程序,请参阅源代码页面

测试

在运行测试套件之前,必须安装开发依赖项

$ composer install

然后,运行所有测试套件

$ vendor/bin/hoa test:run

有关更多信息,请参阅贡献者指南

快速使用

作为一个快速概述,我们建议查看如何在内存中创建一个简单的有向图并将结果作为DOT 脚本导出,以便在 SVG 中可视化。图实现将使用邻接表结构。因此

// Create the graph instance.
// By default, loops are not allowed and we would like loops for this example,
// so we enable them.
$graph = new Hoa\Graph\AdjacencyList(Hoa\Graph::ALLOW_LOOP);

// Create 4 vertices (aka nodes).
$n1 = new Hoa\Graph\SimpleNode('n1');
$n2 = new Hoa\Graph\SimpleNode('n2');
$n3 = new Hoa\Graph\SimpleNode('n3');
$n4 = new Hoa\Graph\SimpleNode('n4');

// Create edges (aka links) between them.
$graph->addNode($n1);
$graph->addNode($n2, [$n1]); // n2 has parent n1.
$graph->addNode($n3, [$n1, $n2, $n3]); // n3 has parents n1, n2 and n3.
$graph->addNode($n4, [$n3]); // n4 has parent n3.
$graph->addNode($n2, [$n4]); // Add parent n4 to n2.

有向图在内存中创建。现在,让我们将其导出到 DOT 语言

echo $graph;

/**
 * Will output:
 *     digraph {
 *         n1;
 *         n2;
 *         n3;
 *         n4;
 *         n1 -> n2;
 *         n1 -> n3;
 *         n2 -> n3;
 *         n3 -> n3;
 *         n3 -> n4;
 *         n4 -> n2;
 *     }
 */

然后,为了将此 DOT 脚本编译成 SVG 文档,我们将使用dot(1)

$ dot -Tsvg -oresult.svg <( echo 'digraph { … }'; )

结果应该如下所示

result.svg

我们可以看到 n1n2n3 的父节点。n2n3 的父节点。n3n4 的父节点,也是它自己。最后,n4n2 的父节点。

我们的有向图已创建。根据节点,我们可以在其上添加更多信息。使用了 SimpleNode 类。它扩展了 Hoa\Graph\Node 接口。

文档

Hoa\Graph 的黑客手册包含有关如何使用此库及其工作原理的详细信息。

要本地生成文档,请执行以下命令

$ composer require --dev hoa/devtools
$ vendor/bin/hoa devtools:documentation --open

更多文档可以在项目的网站上找到: hoa-project.net

获取帮助

主要有两种方法可以获得帮助

贡献

你想贡献力量吗?谢谢!详细的贡献指南解释了你需要了解的一切。

许可证

Hoa采用新的BSD许可证(BSD-3-Clause)。请参阅LICENSE获取详细信息。