admin 管理员组

文章数量: 1184232


2024年4月26日发(作者:getrealpath的是target目录)

2010年12月 电 脑 学 习 第6期 

将非结构化的流程图转化为结构化的 

N—S流程图的通用算法框架 

陈培军 王欣洁 李馨梅 

摘 要:介绍了将非结构化流程图等价的转化为结构化的N-S流程图的通用算法框架。 

关键词: 流程图:N—S流程图:非结构化流程图:等价变换 

中图分类号:TP311 文献标识码: A 文章编号:1002-2422(2010)06-0103-02 

A General Equivalent C:onversion Framework Form Unstructured Flowchart 

to Structured N-S Flowchart 

Chen Peijun Wang Xinjie Li Xinmei 

Abstract:We design a general equivalent conversion framework for converting unstructured flowchart into structured N—S flow— 

chart. 

Kev w0rds:Flowchart;N—S Diagram;Unstructured Flowchart;Program Equivalence 

1通用转换框架 

(1)将每一步的具体的计算过程抽象、简化,并用不同 

的编号表示不同的过程,简化的传统流程图如图1所示。 

2(b)需要先通过重复书写语句的等价变换变成类似图2(a) 

的样子。 

有了上面的理解,从而一般的框架可抽象为:找出当前 

顶点个数最小的圈,依次对圈中每个顶点的度进行判断。如 

果只有一个顶点的度大于等于3,并且该顶点的度等于4,则 

为图2中(a)中的情形;如果只有两个顶点的度大于等于3, 

并且这两个顶点的度都等于3,进一步若该圈在原有向图 

中,也是一个有向圈,则为图2中(b)的情形,否则为图2中 

(c)的情形。重复上述过程直到没有圈可以简化。 

(4)将流程图分成一系列顺序执行的子块。不包含在任 

意圈中的顶点自身为一个子块。对于任意的两个圈,如果这 

两个圈有一个相同的顶点,则这两个圈中包含的所有顶点属 

于同一个子块:对于上述子块,若包含满足下面性质的项 

点一所有指向该顶点的有向边所在的圈所包含的顶点与所 

有从该顶点出发的有向边所在的圈所包含的顶点的交集只 

有这个顶点,则可在该顶点处将该子块分成两个子块,该顶 

点包含在后面的子块里。经过上述过程,可将流程图分成一 

(C) 

系列顺序执行的子块。该实例可以分为三个子块,A、E分别 

为两个子块,其余的属于同一个子块。 

(5)对每个包含多个圈的子块,通过逐分支遍历,动态 

调整建立其N—S流程图。如果只有分支结构,即该子块中虽 

然有圈,但没有有向圈,则总可以通过重复书写语句将其转 

化为N—S流程图。如果最外层的条件为分支条件,则可以通 

过重复书写语句得到该条件的每个分支,然后利用第(4)步 

将每个分支分解为一系列顺序执行的子块。根据上面的分 

析,设计以下抽象的算法: 

图1简化的流程图 

图2可进一步简化的 

内容的示意图 

(2)将流程图看成图论中的图。将流程图中的每个操 

作,每个判断“是”,“否”均看成图的顶点,流向箭头看成有 

向图中的有向边,则可将传统的流程图看成一个有向图。根 

据需要,也可将其视为无向图,则循环结构中有圈、分支结构 

或不同的出口最终汇总时,也会出现圈。 

(3)将简单的循环结构或分支结构用一个编号表示,并 

记录该编号的含义,从而进一步简化流程图。 

如果流程图中出现图2中的三种情形,都可以简化。图 

①如果该子块不包含圈,结束:否则,执行第②步。 

②从子块的入口,顺着箭头的方向,逐分支遍历,找到第 

2(a)和图2(c)中可用一个编号表示虚线框住的部分,对图 

个条件,判断条件是否包含于任意一个有向圈中。如果不 

收稿日期:2010一ll—O1 

陈培军、王欣洁太原科技大学讲师(山西,太原030024)。 

李馨梅东北农业大学理学院信息与计算科学专业2009级本科生(黑龙江,哈尔滨150030)。 

包含于任何一个有向圈中,则采用重复书写语句的方法得到 

(无条件执行条件C1的循环体)。结果见图5。 

该条件的每一个分支,并将每一个分支分成一系列顺序执行 

的子块,对每一个子块递归(转第①步);如果包含于一个有 

算法框架中所有的其他操作,都是为了将流程图转换为 

类似图1的情形,核心的问题就是处理类似上面的问题。通 

过上面的分析,可以体会到如何决定遍历的顺序,如何决定 

条件类型,以及如何逐分支将当前的结果融入已有的框架, 

向圈中,则转第③步。 

③将该条件作为当前子块的最外层的循环条件,和该条 

件位于同一个有向圈中的其他条件均作为分支条件。按一定 

的顺序遍历所有分支,通过动态调整,得到结构化的循环体 

和退出循环后的操作,从而得到相应的N—S流程图。 

I函 l亩 

岫 

(c) 

中 

(a) 

(d) (e) 

(b) 

图3图1中所有的有向图 

图3中的5个有向圈包含了子块所有的顶点,为全部可 

能的遍历路径。从子块的入口,顺着箭头的方向,逐分支遍 

历,找到第一个条件C1,且C1包含在有向圈内见图3(a)和 

图3(b),选择将C1作为外层循环条件。由图1可以看出退 

出循环后,在子块内,什么也不做;继续找出条件Cl不成立 

时的循环体。从包含C1的最简单的有向圈图3(a),通过重 

复书写语句得到图4(a),其中画问号的地方有待于进一步 

完善,下面继续遍历其他的路径将其不断完善。 

继续找包含条件C1的当前最简单的路径,对该实例还 

只有一个有向圈见图3(b)包含C1,将该圈包含的内容融入 

4(a),得到图4(b),其中两个画问号的分支需要确定 

从剩下的路径中选择一个简单的见图3(c)。图3(c) 

表示当条件C3不成立时,无条件执行循环;当c3成立时, 

退出循环。引入辅助变量flagl,给其赋初值0,当flag1==0 

时,执行循环;当flagl==l时,退出循环。当c3不成立时,不 

修改flagl的值,从而继续执行循环;当c3成立时,修改 

lfagl的值为l,从而退出循环。所以将图3(c)进一步融入已 

有的N—S流程图,得到图4(c)。进一步融入图3(d)(该图 

表示当C3成立时,C4不成立时,C5不成立时,无条件执行 

操作H、C-),得图4(d)。 

对最后的有向圈图3(e),表示当C2和C3成立,C4不 

成立,C5成立,退出内层的循环,执行完操作J后,无条件进 

入条件c1的循环体,对应图4(d)中画问号的部分的内容。 

引入辅助变量na异2,赋初值0,修改外层循环的条件为“当 

C1不成立或flag2==l”,为了使其他分支仍与原来等价,在 

外层循环体内的开始部分,增加语句flag2=0;所以4(d)中 

画问号部分的操作为J;flagl=l(跳出内层循环);flag2=l 

修正得到与已有框架相容的新的框架,最终得到N-S流程图 

的过程。上述过程还有待于进一步抽象、细化、完善。要解决 

上下文的语义识别、逻辑关系的理解及其等价变形。 

B 

B 

B 

C C 

C 

D 

D 

D 

当C1不成立时 当Cl不成立时 当Cl不成立 

’ 

F 

\ < 

\ 2/1 

\C 

G 

G 

G 

\【:3 K 

lfazl=O K lfail:o 

B 

当flagl=O B 

当flagl--0 K 

C 

、、C3 C \l: B 

D 

D 

\c / C 

D 

t 

D 

lag=1ll 

'l  ̄l- 

(d) 

图4不断修正得到N—S流程图的中间过程 

A 

B 

C 

上) 

tlag2-0 

当Cl小成立时或flag2=l 

lfae2=O 

F 

——、 C2 

G 

flagl=0 

当flagl=O 

—\

C4/

 

N 

3 

K 

I iy-'--- ̄s B 

C I H C 

D lfagl=l H G D 

lfagl=l flag2=l G 

E 

图5最终的N—S流程图 

(6)将各个层级的子块组装,将第(3)步中得到的各 

个中间编号,根据相应的记录逐级展开还原,得到相应的N— 

S流程图。对本例只有一个子块有圈,并且第一个条件即为 

循环条件,且没有第(3)步中的简化,所以组装非常简单,最 

终的结果如图5所示。 

2结束语 

结合具体的实例,给出了由非结构化的流程图转化为与 

之等价的N—S流程图的宏观算法框架,仅是一种可行的方 

法,可用于指导一般问题的转换。 

参考文献 

【1】邓德祥.结构化流程图的回顾与改进意见L玎.北京:北方工业大 

学学报,1992,4(3):81—87. 

【2]张广泉.非结构化程序流程图及其等价变换L乃.重庆:重庆师范 

学院学报(自然科学版),1993,10(3):28—31. 

【3】孙靖民,粱迎春.机械优化设计【M】(第4版).北京:机械工业出 

版社,2o07:130-135. 


本文标签: 流程图 子块 条件 顶点