可流动的流程图平面性

时间:2010-03-15 05:37:02

标签: algorithm graph graph-theory

我有一个问题:是否有任何参考(例如纸张)有流程图布局的平面性证明?有人能建议用于生成流程图(平面)布局的算法吗?

我知道有一些代码到流程图的工具,但我不知道他们的内部。

2 个答案:

答案 0 :(得分:4)

我不同意Hooked。流量图有一些限制(使用循环 NOT 其中之一)是平面的。一些例子:

  • 单个基元命令转换为平面图(单个节点)
  • 一系列陈述:如果陈述可以转换为平面图,则序列本身可以转换为平面图(只需连接这些子图)
  • 功能:与上述相同
  • A(repeat-untilwhile-do等)循环是一系列形成循环的语句。循环也很好,只要它们正确嵌套(并且这样的构造被设计为正确嵌套)。
  • Goto语句(gotobreak / continue / return可能跳转的语句)确定。如果你有一个嵌套循环,并且从内部跳出外循环,这样的边将明显地与包含它的循环(循环,函数)相交。如果代码被翻译为一次退出一个循环,那么这些也很好。 (这种翻译与简单地引入节点来模拟交叉点并没有什么不同。)

必须有一种更系统的方式来正式证明从一组特定构造的组合得到的流程图是平面的,我希望我能在5分钟内想到它,但没有运气:)

更新:顺便说一句,goto s可以简单地创建一个K3,3或K5,例如这是一个K5(在老式的QBasic中!):

00 GOTO (INT(RND * 5) * 10) 
10 GOTO (INT(RND * 5) * 10)
20 GOTO (INT(RND * 5) * 10)
30 GOTO (INT(RND * 5) * 10)
40 GOTO (INT(RND * 5) * 10)

答案 1 :(得分:1)

这取决于你所谓的“流程图”。如果流程图是简单类型,即。没有节点向上指向的有向图(对于之前可能已经访问过的节点),那么你所描述的是tree,它在平面中的嵌入是微不足道的。

但是,如果你的流程图有循环(循环),那么构造一个反例,一个非可嵌入平面的图形是很简单的。对于一个人为的例子(没有说明任何限制),考虑完整的图表K5,其中每个节点彼此连接。此图表不是平面的。

至于绘制图形,我想推荐一个优秀的工具GraphViz,它可以绘制(除其他外)具有自动布局的漂亮流程图。您可以选择尝试在图表中保留某些顺序的渲染引擎,并且存在分层图形的显式选项。