概要

优质
小牛编辑
136浏览
2023-12-01

输入和输出

下图是Graph::Easy的概要图,输入是绿色,直接输出是橘黄色,白色是组成节点。黄色的节点是使用第三方模块支持的格式输出。

有很多种方式创建Graph::Easy内部支持的数据结构:

  • 使用交互式编辑器(没有实现)
  • 使用Graph::Easy能理解的文本格式(graphviz, VCG, GDL, Graph::Easy)然后使用命令行工具graph-easy来解析并产生输出(这个工具会和模块一起安装)
  • 直接写perl代码

下面是一点使用perl代码的例子:

use strict;
use Graph::Easy;

my $graph = Graph::Easy->new();

$graph->add_edge('Bonn', 'Berlin');
$graph->add_edge('Berlin', 'Bonn', 'train' );

相应的文本描述如下:

[ Berlin ] -- train --> [ Bonn ]
[ Bonn ] --> [ Berlin ]

如你所见,使用文本描述更加简洁。当然,使用文本然后解析还是使用perl完全取决于你。同样地,如果你有了Graph::Easy对象,你可以把它输出为任意你想要的格式。 另外,使用文本描述是完备的:你可以先解析文本,产生输出;然后可以把输出又转换为文本描述。

存储和布局

Graph::Easy的确使用了Graph模块来存储和管理内部的图形数据;但是从版本v0.25开始,它没有这么做了;它简单地把边和节点存储了Perl的Hash表,然后直接访问;为什么这么做请参见这里

要说明的是,Graph和Graph::Easy这两个模块都仅仅存储了图形的表示数据,没有特定的布局信息;比如下面的图(使用Graph::Easy语法表示的 )

[ A ] -> [ C ] -> [ D ]
[ C ] -> [ E ]

可以有多种布局方式(有可能无穷多种),下面是两个例子:

+---+     +---+     +---+
| A | --> | C | --> | D |
+---+     +---+     +---+
            |
            |
            v
          +---+
          | E |
          +---+

布局

上面提到过,Graph::Easy仅仅存储了图像的描述信息,要产生特定的布局,需要借助其他的工具;以下是在Perl里面可以通过Graph产生布局的一些方法:

将来或许会有更多,但是作者开始写这个模块的时候,只有这些选择。和其他的方式不同Graph::Easy使用了一种checker-board tiled布局。

要指出的是,传统的把节点放置在任意位置的方式不能产生ASCII格式的输出,也不能产生HTML的输出;好吧,或许是有可能,但是如果边不是直的而是到处都是的话,那么非常难办。

以上也是这个项目存在的原因。:-P

最后更新:

类似资料

  • 介绍 iSlider是一个表现出众,无任何插件依赖的手机平台javascript滑动组件。它能够处理任何元素,例如图片或者DOM元素。 特性 优秀的性能,更少的内存占用; 提供丰富的动画切换效果,自带的效果包括 default, rotate, depth, flow, flip, card, fade 等,并且可以进行无限的扩展; 提供丰富的回调触发器,并且添加回调函数极为方便,无论在初始化还是

  • Webpack也做类似热部署和代码优化,我们没有覆盖。有关更多信息,您可以查看。源代码也可以在Github上获得。

  • 百度搜索用户体验中心 《Web设计指南》是专门为广大Web内容生态提供一套简单实用的设计指南,目的是提升设计与开发的效率及质量,为广大用户提供优质的用户体验。 Web内容数以千亿涵盖生活各个方面,除了稳定流畅的浏览,优质的内容及服务,也需要高质量的交互及视觉体验。 基于百度新使命以及百度搜索开放的生态特征,我们提供适合第三方的设计指南与直观的案例参照。 设计指南会根据Web生态的发展不断更新优化,

  • 前言 需要了解的是 dva 是对 redux 的一层浅封装,所以虽然我们不要求一定要了解 redux 才能学会使用 dva,但是如果你对 redux 有所了解,再使用 dva 一定驾轻就熟,并且会了解很多潜在的知识点。redux的社区较为成熟,文档也比较健全,可以访问 http://redux.js.org(中文文档)查看更多内容,其中会介绍整个生态系统的相关框架与设计思路,值得一看。 开始 在

  • 智齿科技是业内首家以人工智能整合云呼叫中心、机器人客服、人工在线客服、工单系统的统一客服平台厂商,提供客户服务一站式解决方案。 不管你的客户来自于桌面网站,移动网站,微博,微信,App,智齿客服都会统一进行响应和管理 智齿客服融合了在线客服+机器人客服+呼叫中心+工单系统+AI大数据分析平台+开发平台六大产品模块,客户互通,数据互通,一款系统解决所有客服问题 在线及电话接待的客户,通过“获客-吸引

  • 英文原文:http://emberjs.com/guides/concepts/core-concepts/ 要开始学习Ember.js,首先要了解一些核心概念。 Ember.js的设计目标是能帮助广大开发者构建能与本地应用相颦美的大型Web应用。要实现这个目标需要新的工具和新的概念。我们花了很大的功夫从Cocoa、Smalltalk等本地应用框架引入了其优秀的理念。 然而,记住Web的特殊性非常