一种判断流程图中是否存在循环回路的方法和装置的制作方法

文档序号:6355326阅读:667来源:国知局
专利名称:一种判断流程图中是否存在循环回路的方法和装置的制作方法
技术领域
本发明涉及计算机技术领域,特别涉及一种判断流程图中是否存在循环回路的方法和装置
背景技术
图的数据结构在游戏、工作流、图像处理、影像处理等领域有着广泛的应用,图的遍历算法是图的数据结构操作中最重要和最常见的操作之一。流程图是图的一种特例,它是用图的方式描述一段流程。流程图的执行就是一种特殊的遍历,它是从开始节点开始,经过一系列节点,最终到达终止节点的过程。但是因为各种原因,流程图中经常会出现循环回路,也就是正在执行的节点的输出又会反馈回到已经执行过的节点,出现无法跳出的循环。所以为了防止流程图的执行过程中出现无法跳出的循环,每一步流转过程都需要检查是否存在循环回路,避免陷入循环。现有技术的判断流程图中是否存在循环回路的方法如下根据流程图中的节点是否已被执行和是否已被搜索,可以将流程图中的每个节点的状态分为执行状态和搜索状态,其中执行状态包括未执行、已执行、跳过,搜索状态包括已搜索、未搜索。然后使用多个布尔(boolean)类型的标志,或多个普通的数字型或者枚举型的标志,与节点的每个状态分别对应,比如用I表示未执行、2表示已执行、3表示跳过,用4表示已搜索、5表示未搜索。分别对流程图中的当前节点的每一个相邻出口节点进行遍历,并标注遍历后的每个结点的状态,在对某个相邻出口节点进行遍历后,根据标注的每个结点的状态判断将该相邻出口节点作为当前节点的流转节点时是否存在循环回路。根据标注的每个结点的状态判断将该相邻出口节点作为当前节点的流转节点时是否存在循环回路具体是判断该当前节点的入口节点中是否存在状态为未执行已搜索的节点,或状态为已跳过已搜索的节点,如果存在,则将该相邻出口节点作为当前节点的流转节点时存在循环回路。在实现本发明的过程中,发明人发现现有技术至少存在以下问题现有技术的方法在判断流程图中是否存在循环回路时,需要将入口节点的执行状态和搜索状态联合起来进行判断,即需要使用多个表达式(expression)联合起来进行判断,判断的方式复杂,判断算法的运行速度慢。

发明内容
为了解决现有技术中的问题,本发明实施例提供了一种判断流程图中是否存在循环回路的方法和装置。所述技术方案如下一种判断流程图中是否存在循环回路的方法,所述方法包括根据预设的节点状态与状态值之间的对应关系,将流程图中每个节点的状态标注为相应的状态值;判断是否能够搜索到当前节点的相邻出口节点;
如果能够搜索到当前节点的相邻出口节点,则将搜索到的当前节点的所有相邻出口节点中的一个相邻出口节点作为第一当前相邻出口节点;将所述第一当前相邻出口节点的原状态值与已搜索状态值进行或运算,得到所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值;判断所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与所述第一当前相邻出口节点的原状态值是否相等;如果所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与所述第一当前相邻出口节点的原状态值不相等,则将所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为所述第一当前相邻出口节点的当前状态值;
判断是否能够搜索到所述第一当前相邻出口节点的相邻出口节点;如果不能够搜索到所述第一当前相邻出口节点的相邻出口节点,则判断所述当前节点的所有入口节点中是否存在状态值为已搜索状态值的节点;如果所述当前节点的所有入口节点中存在状态值为已搜索状态值的节点,则证明将所述第一当前相邻出口节点作为所述当前节点的流转节点时,存在循环回路。一种判断流程图中是否存在循环回路的装置,所述装置包括标注模块,用于根据预设的节点状态与状态值之间的对应关系,将流程图中每个节点的状态标注为相应的状态值;第一判断模块,用于当所述标注模块将流程图中每个节点的状态标注为相应的状态值后,判断是否能够搜索到当前节点的相邻出口节点;第一处理模块,用于当所述第一判断模块判断能够搜索到当前节点的相邻出口节点后,将搜索到的当前节点的所有相邻出口节点中的一个相邻出口节点作为第一当前相邻出口节点;第一运算模块,用于当所述第一处理模块将搜索到的当前节点的所有相邻出口节点中的一个相邻出口节点作为第一当前相邻出口节点后,将所述第一当前相邻出口节点的原状态值与已搜索状态值进行或运算,得到所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值;第二判断模块,用于当所述第一运算模块得到所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值后,判断所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与所述第一当前相邻出口节点的原状态值是否相等;第二处理模块,用于当所述第二判断模块判断所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与所述第一当前相邻出口节点的原状态值不相等时,将所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为所述第一当前相邻出口节点的当前状态值;第三判断模块,用于当所述第二处理模块将所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为所述第一当前相邻出口节点的当前状态值后,判断是否能够搜索到所述第一当前相邻出口节点的相邻出口节点;第四判断模块,用于当所述第三判断模块判断不能够搜索到所述第一当前相邻出口节点的相邻出口节点时,判断所述当前节点的所有入口节点中是否存在状态值为已搜索状态值的节点;
第一证明模块,用于当所述第四判断模块判断所述当前节点的所有入口节点中存在状态值为已搜索状态值的节点后,证明将所述第一当前相邻出口节点作为所述当前节点的流转节点时,存在循环回路。本发明实施例提供的技术方案的有益效果是通过利用二进制“或(XOR) ”运算的特点,通过设置各个节点状态的状态值,实现只需判断一次或运算结果值就可以得知是否存在循环回路,即只需判断一个表达式就可以获得组合判断结果,判断方式简单,提高了判断算法的运行速度。


图I是本发明实施例I提供的一种判断流程图中是否存在循环回路的方法流程图;图2a和图2b是本发明实施例2提供的一种判断流程图中是否存在循环回路的方法流程图;图3是本发明实施例2提供的一种流程图的状态示意图;图4是本发明实施例2提供的一种流程图的状态值示意图;图5是本发明实施例2提供的一种利用实施例2所述的方法处理后的流程图的状态不意图;图6是本发明实施例2提供的一种利用实施例2所述的方法处理后的流程图的状态值示意图;图7是本发明实施例3提供的第一种判断流程图中是否存在循环回路的装置结构示意图;图8是本发明实施例3提供的第二种判断流程图中是否存在循环回路的装置结构示意图;图9是本发明实施例3提供的第三种判断流程图中是否存在循环回路的装置结构示意图; 图10是本发明实施例3提供的第四种判断流程图中是否存在循环回路的装置结构示意图;图11是本发明实施例3提供的第五种判断流程图中是否存在循环回路的装置结构示意图;图12是本发明实施例3提供的第六种判断流程图中是否存在循环回路的装置结构示意图;图13是本发明实施例3提供的第七种判断流程图中是否存在循环回路的装置结构示意图;图14是本发明实施例3提供的第八种判断流程图中是否存在循环回路的装置结构示意图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。在描述过程中需要用二进制数值,在以下内容中用小写b开头的O和I组成的数字来表示二进制数值,比如blOO表示二进制数值100。实施例I参见图1,本发明实施例提供了一种判断流程图中是否存在循环回路的方法,包括101 :根据流程图中每个节点的状态和预设的节点状态与状态值之间的对应关系,得到流程图中每个节点的状态值。102 :判断是否能够搜索到当前节点的相邻出口节点。103 :如果能够搜索到当前节点的相邻出口节点,则将搜索到的当前节点的所有相邻出口节点中的一个相邻出口节点作为第一当前相邻出口节点。
104 :将第一当前相邻出口节点的原状态值与已搜索状态值进行或运算,得到第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值。105 :判断第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与第一当前相邻出口节点的原状态值是否相等。106 :如果第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与第一当前相邻出口节点的原状态值不相等,将第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为第一当前相邻出口节点的当前状态值。107 :判断是否能够搜索到第一当前相邻出口节点的相邻出口节点。108 :如果不能够搜索到第一当前相邻出口节点的相邻出口节点,则判断当前节点的所有入口节点中是否存在状态值为已搜索状态值的节点。109 :如果当前节点的所有入口节点中存在状态值为已搜索状态值的节点,则证明将第一当前相邻出口节点作为当前节点的流转节点时,存在循环回路。进一步地,判断第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与第一当前相邻出口节点的原状态值是否相等之后,该方法还包括如果第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与第一当前相邻出口节点的原状态值相等,则判断当前节点的所有相邻出口节点中是否存在未被执行过的相邻出口节点。如果当前节点的所有相邻出口节点中存在未被执行过的相邻出口节点,则将当前节点的所有未被执行过的相邻出口节点中的一个相邻出口节点作为第一当前相邻出口节点,然后执行将第一当前相邻出口节点的原状态值与已搜索状态值进行或运算的步骤。进一步地,判断是否能够搜索到第一当前相邻出口节点的相邻出口节点之后,该方法还包括如果能够搜索到第一当前相邻出口节点的相邻出口节点,则将搜索到的第一当前相邻出口节点的所有相邻出口节点中的一个相邻出口节点作为第二当前相邻出口节点。判断第二当前相邻出口节点的原状态值是否是已执行状态值。如果第二当前相邻出口节点的原状态值是已执行状态值,则判断第一当前相邻出口节点的所有相邻出口节点中是否存在未被执行过的相邻出口节点。如果第一当前相邻出口节点的所有相邻出口节点中存在未被执行过的相邻出口节点,则将第一当前相邻出口节点的所有未被执行过的相邻出口节点中的一个相邻出口节点作为第二当前相邻出口节点,然后执行判断第二当前相邻出口节点的原状态值是否是已执行状态值的步骤。进一步地,判断第二当前相邻出口节点的原状态值是否是已执行状态值之后,该方法还包括如果第二当前相邻出口节点的原状态值不是已执行状态值,则将第二当前相邻出口节点的原状态值与第一当前相邻出口节点的当前状态值进行或运算,得到或运算结果值。判断第二当前相邻出口节点的原状态值与第一当前相邻出口节点的当前状态值的或运算结果值与第二当前相邻出口节点的原状态值是否相等。如果第二当前相邻出口节点的原状态值与第一当前相邻出口节点的当前状态值 的或运算结果值与第二当前相邻出口节点的原状态值相等,则执行判断第一当前相邻出口节点的所有相邻出口节点中是否存在未被执行过的相邻出口节点的步骤。进一步地,判断第二当前相邻出口节点的原状态值与第一当前相邻出口节点的当前状态值的或运算结果值与第二当前相邻出口节点的原状态值是否相等之后,该方法还包括如果第二当前相邻出口节点的原状态值与第一当前相邻出口节点的当前状态值的或运算结果值与第二当前相邻出口节点的原状态值不相等,则将第二当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为第二当前相邻出口节点的当前状态值。判断是否能够搜索到第二当前相邻出口节点的相邻出口节点。如果能够搜索到第二当前相邻出口节点的相邻出口节点,则将第二当前相邻出口节点作为第一当前相邻出口节点,将搜索到的第二当前相邻出口节点的所有相邻出口节点中的一个相邻出口节点作为第二当前相邻出口节点,然后执行判断第二当前相邻出口节点的原状态值是否是已执行状态值的步骤。进一步地,判断是否能够搜索到第二当前相邻出口节点的相邻出口节点之后,该方法还包括如果不能够搜索到第二当前相邻出口节点的相邻出口节点,则判断第一当前相邻出口节点的所有相邻出口节点中是否存在未被执行过的相邻出口节点。如果第一当前相邻出口节点的所有相邻出口节点中存在未被执行过的相邻出口节点,则将第一当前相邻出口节点的所有未被执行过的相邻出口节点中的一个相邻出口节点作为第二当前相邻出口节点,然后执行判断第二当前相邻出口节点的原状态值是否是已执行状态值的步骤。进一步地,判断第一当前相邻出口节点的所有相邻出口节点中是否存在未被执行过的相邻出口节点之后,该方法还包括如果第一当前相邻出口节点的所有相邻出口节点中不存在未被执行过的相邻出口节点,则执行判断当前节点的所有入口节点中是否存在状态值为已搜索状态值的节点的步骤。进一步地,判断当前节点的所有入口节点中是否存在状态值为已搜索状态值的节点之后,该方法还包括如果当前节点的所有入口节点中不存在状态值为已搜索状态值的节点,则证明将第一当前相邻出口节点作为当前节点的流转节点时,不存在循环回路。
本发明实施例所述的判断流程图中是否存在循环回路的方法,利用二进制“或(XOR) ”运算的特点,通过设置各个节点状态的状态值,实现只需判断一次或运算结果值就可以得知是否存在循环回路,即只需判断一个表达式就可以获得组合判断结果,判断方式简单,提高了判断算法的运行速度。实施例2参见图2a和图2b,本发明实施例提供了一种判断流程图中是否存在循环回路的方法,包括201 :根据流程图中每个节点的状态和预设的节点状态与状态值之间的对应关系,得到流程图中每个节点的状态值。本发明实施例中,设节点状态包括未执行、已执行、跳过和已搜索。并且预设的节点状态与状态值之间的对应关系如下未执行对应的状态值为bOOO、已执行对应的状态值 为bill、跳过对应的状态值为b010、已搜索对应的状态值为bllO。并且,为了便于描述,将未执行对应的状态值称为未执行状态值、已执行对应的状态值称是已执行状态值、跳过对应的状态值称为跳过状态值、已搜索对应的状态值称为已搜索状态值。例如,参见图3和图4,根据流程图中每个节点的状态和预设的节点状态与状态值之间的对应关系,将流程图3中每个节点的状态标注为相应的状态值,得到如图4所示的结果O并且,还可以设置节点状态与状态值之间的对应关系如下未执行对应的状态值为bOOOO、已执行对应的状态值为bllio、跳过对应的状态值为bOlOO、已搜索对应的状态值为bllOO。或还可以设置节点状态与状态值之间的对应关系如下未执行对应的状态值为b0000、已执行对应的状态值为bl 101、跳过对应的状态值为b0100、已搜索对应的状态值为bllOO。或还可以设置节点状态与状态值之间的对应关系如下未执行对应的状态值为bOOOOO、已执行对应的状态值为bOllOl、跳过对应的状态值为bOOlOO、已搜索对应的状态值为bOllOO。即可以根据实际应用状况设置未执行、已执行、跳过和已搜索的状态值为一组与b000、blll、b010和bllO的二进制标志位具有类似对应关系的值。202 :判断是否能够搜索到当前节点的相邻出口节点,如果能够,则执行203 ;否贝IJ,结束。其中,当前节点是指流程图执行过程中当前执行到的需要判断其的相邻出口节点是否存在循环回路的节点。当前节点的相邻出口节点是指与当前节点相关联的第一个出口节点。例如,参见图3,其中当前节点为步骤B所在的节点,当前节点的相邻出口节点为步骤C所在的节点。203 :将搜索到的当前节点的所有相邻出口节点中的一个相邻出口节点作为第一当前相邻出口节点。例如,参见图3,其中当前节点的相邻出口节点只有一个为步骤C所在的节点,则将步骤C所在的节点作为第一当前相邻出口节点。204 :将第一当前相邻出口节点的原状态值与已搜索状态值进行“或(XOR) ”运算,得到或运算结果值。205:判断或运算结果值与第一当前相邻出口节点的原状态值是否相等,如果相等,则执行220 ;否则,执行206。例如,参见图3和图4,步骤C所在的节点为第一当前相邻出口节点,则第一当前相邻出口节点的原状态值为bOOO。将bOOO与bllO进行“或(XOR) ”运算,得到或运算结果值bllO。从而判断出或运算结果值与第一当前相邻出口节点的原状态值不相等,则执行206。206 :将第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为第一当前相邻出口节点的当前状态值,然后执行207。
例如,参见图3、图4、图5和图6,步骤C所在的节点为第一当前相邻出口节点,且第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值为blio,从而第一当前相邻出口节点的当前状态值为blio。207 :判断是否能够搜索到第一当前相邻出口节点的相邻出口节点,如果能够,则执行208 ;否则,执行217。例如,参见图3、图4、图5和图6,步骤C所在的节点为第一当前相邻出口节点,则第一当前相邻出口节点的相邻出口节点分别为步骤A所在的节点和步骤E所在的节点。208 :将搜索到的第一当前相邻出口节点的所有相邻出口节点中的一个相邻出口节点作为第二当前相邻出口节点。例如将步骤A所在的节点作为第二当前相邻出口节点。209:判断第二当前相邻出口节点的原状态值是否是已执行状态值,如果是,则执行215 ;否则,执行210。例如步骤A所在的节点为第二当前相邻出口节点,参见图4,步骤A所在的节点的原状态值为b010(为已跳过状态值),不是已执行状态值,从而执行210。210 :将第二当前相邻出口节点的原状态值与第一当前相邻出口节点的当前状态值进行“或(XOR) ”运算,得到或运算结果值。例如参见图3、图4、图5和图6,第二当前相邻出口节点(步骤A所在的节点)的原状态值为b010,第一当前相邻出口节点(步骤C所在的节点)的当前状态值为bllO,则第二当前相邻出口节点的原状态值boio与第一当前相邻出口节点的当前状态值blio进行“或(XOR) ”运算得到或运算结果值为bllO。211 :判断或运算结果值与第二当前相邻出口节点的原状态值是否相等,如果相等,则执行215;否则,执行212。例如参见图3、图4、图5和图6,第二当前相邻出口节点(步骤A所在的节点)的原状态值与第一当前相邻出口节点(步骤C所在的节点)的当前状态值的或运算结果值bllO,与第二当前相邻出口节点的原状态值b010不相等,从而执行212。212:将第二当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为第二当前相邻出口节点的当前状态值,然后执行213。例如参见图3、图4、图5和图6,第二当前相邻出口节点(步骤A所在的节点)的原状态值与第一当前相邻出口节点(步骤C所在的节点)的当前状态值的或运算结果值blio,则第二当前相邻出口节点的当前状态值为blio。213 :判断是否能够搜索到第二当前相邻出口节点的相邻出口节点,如果能够,则执行214;否则,执行215。例如参见图3、图4、图5和图6,第二当前相邻出口节点(步骤A所在的节点)的相邻出口节点分别为步骤B所在的节点和步骤D所在的节点。214:将第二当前相邻出口节点作为第一当前相邻出口节点,将搜索到的第二当前相邻出口节点的所有相邻出口节点中的一个相邻出口节点作为第二当前相邻出口节点,然后执打209 ο即按照递归算法对第二当前相邻出口节点的出口节点依次进行判断。例如参见图3、图4、图5和图6,将步骤B所在的节点作为第二当前相邻出口节点。步骤B所在的节点的状态值为bill (已执行状态值),所以执行209后转到215。第一当前相邻出口节点(步骤C所在的节点)的相邻出口节点分别为步骤A所在的节点和步骤E所在的节点,由于步骤E所在的节点还未被执行过,所以执行215后转到216。将步骤E所在的节点作为第二当前相邻出口节点,执行216后转到209。如此递归进行直到执行到结 束所在的节点。参见图6,为按照本发明实施例所述的方法执行后的各个节点的状态值图。215 :判断第一当前相邻出口节点的所有相邻出口节点中是否存在未被执行过的相邻出口节点,如果存在,执行216 ;否则,执行217。216 :将第一当前相邻出口节点的所有未被执行过的相邻出口节点中的一个相邻出口节点作为第二当前相邻出口节点,然后执行209。217:判断当前节点的所有入口节点中是否存在状态值为已搜索状态值的节点,如果存在,则执行218 ;否则,执行219。例如参见图5、图6,当前节点为步骤B所在的节点,当前节点的入口节点分别为步骤A所在的节点和X所在的节点,其中,步骤A所在的节点的状态值为已搜索状态值(bllO),所以执行218。218 :证明将第一当前相邻出口节点作为当前节点的流转节点时,存在循环回路,然后执行220。并且,在证明将第一当前相邻出口节点作为当前节点的流转节点时存在循环回路后,可以将第一当前相邻出口节点存在循环回路的信息记录下来,供流程图执行时参考。具体地,可以通过对第一当前相邻出口节点设定存在循环回路标记等方法将第一当前相邻出口节点存在循环回路的信息记录下来。219 :证明将第一当前相邻出口节点作为当前节点的流转节点时,不存在循环回路,然后执行220。220 :判断当前节点的所有相邻出口节点中是否存在未被执行过的相邻出口节点,如果存在,执彳了 221 ;否则,结束。221 :将当前节点的所有未被执行过的相邻出口节点中的一个相邻出口节点作为第一当前相邻出口节点,然后执行204。本发明实施例所述的判断流程图中是否存在循环回路的方法,利用二进制“或(XOR) ”运算的特点,通过设置各个节点状态的状态值,实现只需判断一次或运算结果值就可以得知是否存在循环回路,即只需判断一个表达式就可以获得组合判断结果,判断方式简单,提高了判断算法的运行速度。实施例3本发明实施例提供了一种判断流程图中是否存在循环回路的装置,参见图7,该装置包括
标注模块301,用于根据预设的节点状态与状态值之间的对应关系,将流程图中每个节点的状态标注为相应的状态值;第一判断模块302,用于当标注模块301将流程图中每个节点的状态标注为相应的状态值后,判断是否能够搜索到当前节点的相邻出ロ节点;第一处理模块303,用于当第一判断模块302判断能够搜索到当前节点的相邻出ロ节点后,将搜索到的当前节点的所有相邻出ロ节点中的一个相邻出ロ节点作为第一当前相邻出口节点;第一运算模块304,用于当第一处理模块303将搜索到的当前节点的所有相邻出ロ节点中的一个相邻出ロ节点作为第一当前相邻出ロ节点后,将第一当前相邻出ロ节点的原状态值与已搜索状态值进行或运算,得到第一当前相邻出口节点的原状态值与已搜索状 态值的或运算结果值;第二判断模块305,用于当第一运算模块304得到第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值后,判断第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与第一当前相邻出ロ节点的原状态值是否相等;第二处理模块306,用于当第二判断模块305判断第一当前相邻出ロ节点的原状态值与已搜索状态值的或运算结果值与第一当前相邻出口节点的原状态值不相等时,将第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为第一当前相邻出口节点的当前状态值;第三判断模块307,用于当第二处理模块306将第一当前相邻出ロ节点的原状态值与已捜索状态值的或运算结果值作为第一当前相邻出口节点的当前状态值后,判断是否能够搜索到第一当前相邻出ロ节点的相邻出ロ节点;第四判断模块308,用于当第三判断模块307判断不能够搜索到第一当前相邻出ロ节点的相邻出口节点时,判断当前节点的所有入口节点中是否存在状态值为已搜索状态值的节点;第一证明模块309,用于当第四判断模块308判断当前节点的所有入口节点中存在状态值为已搜索状态值的节点后,证明将第一当前相邻出口节点作为当前节点的流转节点时,存在循环回路。进ー步地,參见图8,该装置还包括第五判断模块310,用于当第二判断模块305判断第一当前相邻出ロ节点的原状态值与已搜索状态值的或运算结果值与第一当前相邻出口节点的原状态值相等时,判断当前节点的所有相邻出ロ节点中是否存在未被执行过的相邻出ロ节点;第三处理模块311,用于当第五判断模块310判断当前节点的所有相邻出口节点中存在未被执行过的相邻出ロ节点时,将当前节点的所有未被执行过的相邻出ロ节点中的一个相邻出ロ节点作为第一当前相邻出ロ节点,然后通知第一运算模块304执行将第一当前相邻出口节点的原状态值与已搜索状态值进行或运算的步骤。进ー步地,參见图9,该装置还包括第四处理模块312,用于当第三判断模块307判断能够搜索到第一当前相邻出ロ节点的相邻出ロ节点时,将搜索到的第一当前相邻出ロ节点的所有相邻出ロ节点中的ー个相邻出ロ节点作为第二当前相邻出ロ节点;
第六判断模块313,用于当第四处理模块312将搜索到的第一当前相邻出口节点的所有相邻出ロ节点中的一个相邻出ロ节点作为第二当前相邻出ロ节点后,判断第二当前相邻出ロ节点的原状态值是否是已执行状态值;第七判断模块314,用于当第六判断模块313判断第二当前相邻出ロ节点的原状态值是已执行状态值时,判断第一当前相邻出口节点的所有相邻出口节点中是否存在未被执行过的相邻出ロ节点;第五处理模块315,用于当第七判断模块314判断第一当前相邻出ロ节点的所有相邻出ロ节点中存在未被执行过的相邻出ロ节点时,将第一当前相邻出ロ节点的所有未被执行过的相邻出口节点中的一个相邻出口节点作为第二当前相邻出口节点,然后通知第六判断模块313执行判断第二当前相邻出ロ节点的原状态值是否是已执行状态值的步骤。进ー步地,參见图10,该装置还包括 第二运算模块316,用于当第六判断模块313判断第二当前相邻出ロ节点的原状态值不是已执行状态值时,将第二当前相邻出ロ节点的原状态值与第一当前相邻出ロ节点的当前状态值进行或运算,得到或运算结果值;第八判断模块317,用于当第二运算模块316得到或运算结果值后,判断第二当前相邻出ロ节点的原状态值与第一当前相邻出ロ节点的当前状态值的或运算结果值与第二当前相邻出口节点的原状态值是否相等;第六处理模块318,用于当第八判断模块317判断第二当前相邻出ロ节点的原状态值与第一当前相邻出ロ节点的当前状态值的或运算结果值与第二当前相邻出ロ节点的原状态值相等时,通知第七判断模块314执行判断第一当前相邻出ロ节点的所有相邻出ロ节点中是否存在未被执行过的相邻出口节点的步骤。进ー步地,參见图11,该装置还包括第七处理模块319,用于当第八判断模块317判断第二当前相邻出ロ节点的原状态值与第一当前相邻出ロ节点的当前状态值的或运算结果值与第二当前相邻出ロ节点的原状态值不相等时,将第二当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为第二当前相邻出ロ节点的当前状态值;第九判断模块320,用于当第七处理模块319将第二当前相邻出ロ节点的原状态值与已捜索状态值的或运算结果值作为第二当前相邻出口节点的当前状态值后,判断是否能够搜索到第二当前相邻出ロ节点的相邻出ロ节点;第八处理模块321,用于当第九判断模块320判断能够搜索到第二当前相邻出ロ节点的相邻出口节点后,将第二当前相邻出口节点作为第一当前相邻出口节点,将搜索到的第二当前相邻出ロ节点的所有相邻出ロ节点中的一个相邻出ロ节点作为第二当前相邻出ロ节点,然后通知第六判断模块313执行判断第二当前相邻出ロ节点的原状态值是否是已执行状态值的步骤。进ー步地,參见图12,该装置还包括第十判断模块322,用于当第九判断模块320判断不能够搜索到第二当前相邻出ロ节点的相邻出口节点时,判断第一当前相邻出口节点的所有相邻出口节点中是否存在未被执行过的相邻出ロ节点;第九处理模块323,用于当第十判断模块322判断第一当前相邻出ロ节点的所有相邻出ロ节点中存在未被执行过的相邻出ロ节点时,将第一当前相邻出ロ节点的所有未被执行过的相邻出口节点中的一个相邻出口节点作为第二当前相邻出口节点,然后通知第六判断模块313执行判断第二当前相邻出ロ节点的原状态值是否是已执行状态值的步骤。进ー步地,參见图13,该装置还包括第十处理模块324,用于当第七判断模块314判断第一当前相邻出ロ节点的所有相邻出ロ节点中不存在未被执行过的相邻出ロ节点后,通知第四判断模块308执行判断当前节点的所有入口节点中是否存在状态值为已搜索状态值的节点的步骤。进ー步地,參见图14,该装置还包括第二证明模块325,用于当第四判断模块308判断当前节点的所有入口节点中不存在状态值为已搜索状态值的节点后,证明将第一当前相邻出口节点作为当前节点的流转节点时,不存在循环回路。
本发明实施例所述的判断流程图中是否存在循环回路的装置,利用ニ进制“或(XOR) ”运算的特点,通过设置各个节点状态的状态值,实现只需判断一次或运算结果值就可以得知是否存在循环回路,即只需判断一个表达式就可以获得组合判断结果,判断方式简单,提高了判断算法的运行速度。以上实施例提供的技术方案中的全部或部分内容可以通过软件编程实现,其软件程序存储在可读取的存储介质中,存储介质例如计算机中的硬盘、光盘或软盘。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.ー种判断流程图中是否存在循环回路的方法,其特征在于,所述方法包括 根据预设的节点状态与状态值之间的对应关系,将流程图中每个节点的状态标注为相应的状态值; 判断是否能够搜索到当前节点的相邻出ロ节点; 如果能够搜索到当前节点的相邻出ロ节点,则将搜索到的当前节点的所有相邻出口节点中的一个相邻出ロ节点作为第一当前相邻出ロ节点; 将所述第一当前相邻出口节点的原状态值与已搜索状态值进行或运算,得到所述第一当前相邻出ロ节点的原状态值与已搜索状态值的或运算结果值; 判断所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与所述第一当前相邻出口节点的原状态值是否相等; 如果所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与所述第一当前相邻出口节点的原状态值不相等,则将所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为所述第一当前相邻出ロ节点的当前状态值; 判断是否能够搜索到所述第一当前相邻出ロ节点的相邻出ロ节点; 如果不能够搜索到所述第一当前相邻出ロ节点的相邻出ロ节点,贝1J判断所述当前节点的所有入口节点中是否存在状态值为已搜索状态值的节点; 如果所述当前节点的所有入口节点中存在状态值为已搜索状态值的节点,则证明将所述第一当前相邻出口节点作为所述当前节点的流转节点时,存在循环回路。
2.根据权利要求I所述的判断流程图中是否存在循环回路的方法,其特征在于,判断所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与所述第一当前相邻出ロ节点的原状态值是否相等之后,所述方法还包括 如果所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与所述第一当前相邻出ロ节点的原状态值相等,则判断所述当前节点的所有相邻出ロ节点中是否存在未被执行过的相邻出口节点; 如果所述当前节点的所有相邻出ロ节点中存在未被执行过的相邻出ロ节点,则将所述当前节点的所有未被执行过的相邻出ロ节点中的一个相邻出ロ节点作为第一当前相邻出ロ节点,然后执行将所述第一当前相邻出口节点的原状态值与已搜索状态值进行或运算的步骤。
3.根据权利要求I所述的判断流程图中是否存在循环回路的方法,其特征在于,判断是否能够搜索到所述第一当前相邻出ロ节点的相邻出ロ节点之后,所述方法还包括 如果能够捜索到所述第一当前相邻出ロ节点的相邻出ロ节点,则将搜索到的所述第一当前相邻出ロ节点的所有相邻出ロ节点中的一个相邻出ロ节点作为第二当前相邻出ロ节点; 判断所述第二当前相邻出ロ节点的原状态值是否是已执行状态值; 如果所述第二当前相邻出口节点的原状态值是已执行状态值,则判断所述第一当前相邻出ロ节点的所有相邻出ロ节点中是否存在未被执行过的相邻出ロ节点; 如果所述第一当前相邻出ロ节点的所有相邻出口节点中存在未被执行过的相邻出ロ节点,则将所述第一当前相邻出口节点的所有未被执行过的相邻出口节点中的一个相邻出ロ节点作为第二当前相邻出口节点,然后执行判断所述第二当前相邻出口节点的原状态值是否是已执行状态值的步骤; 如果所述第二当前相邻出口节点的原状态值不是已执行状态值,则将所述第二当前相邻出口节点的原状态值与所述第一当前相邻出口节点的当前状态值进行或运算,得到或运算结果值; 判断所述第二当前相邻出口节点的原状态值与所述第一当前相邻出口节点的当前状态值的或运算结果值与所述第二当前相邻出口节点的原状态值是否相等; 如果所述第二当前相邻出口节点的原状态值与所述第一当前相邻出口节点的当前状态值的或运算结果值与所述第二当前相邻出口节点的原状态值相等,则执行判断所述第一当前相邻出口节点的所有相邻出口节点中是否存在未被执行过的相邻出口节点的步骤;如果所述第二当前相邻出口节点的原状态值与所述第一当前相邻出口节点的当前状 态值的或运算结果值与所述第二当前相邻出口节点的原状态值不相等,则将所述第 二当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为所述第二当前相邻出口节点的当前状态值; 判断是否能够搜索到所述第二当前相邻出口节点的相邻出口节点; 如果能够搜索到所述第二当前相邻出口节点的相邻出口节点,则将所述第二当前相邻出口节点作为第一当前相邻出口节点,将搜索到的所述第二当前相邻出口节点的所有相邻出口节点中的一个相邻出口节点作为第二当前相邻出口节点,然后执行判断所述第二当前相邻出口节点的原状态值是否是已执行状态值的步骤; 如果不能够搜索到所述第二当前相邻出口节点的相邻出口节点,则执行判断所述第一当前相邻出口节点的所有相邻出口节点中是否存在未被执行过的相邻出口节点的步骤。
4.根据权利要求3所述的判断流程图中是否存在循环回路的方法,其特征在于,判断所述第一当前相邻出口节点的所有相邻出口节点中是否存在未被执行过的相邻出口节点之后,所述方法还包括 如果所述第一当前相邻出口节点的所有相邻出口节点中不存在未被执行过的相邻出口节点,则执行判断所述当前节点的所有入口节点中是否存在状态值为已搜索状态值的节点的步骤。
5.根据权利要求1-4中任意一项权利要求所述的判断流程图中是否存在循环回路的方法,其特征在于,判断所述当前节点的所有入口节点中是否存在状态值为已搜索状态值的节点之后,所述方法还包括 如果所述当前节点的所有入口节点中不存在状态值为已搜索状态值的节点,则证明将所述第一当前相邻出口节点作为所述当前节点的流转节点时,不存在循环回路。
6.一种判断流程图中是否存在循环回路的装置,其特征在于,所述装置包括 标注模块,用于根据预设的节点状态与状态值之间的对应关系,将流程图中每个节点的状态标注为相应的状态值; 第一判断模块,用于当所述标注模块将流程图中每个节点的状态标注为相应的状态值后,判断是否能够搜索到当前节点的相邻出口节点; 第一处理模块,用于当所述第一判断模块判断能够搜索到当前节点的相邻出口节点后,将搜索到的当前节点的所有相邻出口节点中的一个相邻出口节点作为第一当前相邻出口节点;第一运算模块,用于当所述第一处理模块将搜索到的当前节点的所有相邻出口节点中的一个相邻出ロ节点作为第一当前相邻出ロ节点后,将所述第一当前相邻出ロ节点的原状态值与已搜索状态值进行或运算,得到所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值; 第二判断模块,用于当所述第一运算模块得到所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值后,判断所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与所述第一当前相邻出ロ节点的原状态值是否相等; 第二处理模块,用于当所述第二判断模块判断所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与所述第一当前相邻出口节点的原状态值不相等时,将所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为所述第一当前相邻出口节点的当前状态值; 第三判断模块,用于当所述第二处理模块将所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为所述第一当前相邻出口节点的当前状态值后,判断是否能够搜索到所述第一当前相邻出ロ节点的相邻出ロ节点; 第四判断模块,用于当所述第三判断模块判断不能够搜索到所述第一当前相邻出口节点的相邻出口节点时,判断所述当前节点的所有入口节点中是否存在状态值为已搜索状态值的节点; 第一证明模块,用于当所述第四判断模块判断所述当前节点的所有入口节点中存在状态值为已搜索状态值的节点后,证明将所述第一当前相邻出口节点作为所述当前节点的流转节点时,存在循环回路。
7.根据权利要求6所述的判断流程图中是否存在循环回路的装置,其特征在于,所述装置还包括 第五判断模块,用于当所述第二判断模块判断所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与所述第一当前相邻出口节点的原状态值相等时,判断所述当前节点的所有相邻出ロ节点中是否存在未被执行过的相邻出ロ节点; 第三处理模块,用于当所述第五判断模块判断所述当前节点的所有相邻出口节点中存在未被执行过的相邻出ロ节点时,将所述当前节点的所有未被执行过的相邻出ロ节点中的一个相邻出ロ节点作为第一当前相邻出ロ节点,然后通知所述第一运算模块执行将所述第一当前相邻出口节点的原状态值与已搜索状态值进行或运算的步骤。
8.根据权利要求6所述的判断流程图中是否存在循环回路的装置,其特征在于,所述装置还包括 第四处理模块,用于当所述第三判断模块判断能够搜索到所述第一当前相邻出口节点的相邻出ロ节点时,将搜索到的所述第一当前相邻出ロ节点的所有相邻出ロ节点中的ー个相邻出口节点作为第二当前相邻出口节点; 第六判断模块,用于当所述第四处理模块将搜索到的所述第一当前相邻出口节点的所有相邻出ロ节点中的一个相邻出ロ节点作为第二当前相邻出ロ节点后,判断所述第二当前相邻出ロ节点的原状态值是否是已执行状态值; 第七判断模块,用于当所述第六判断模块判断所述第二当前相邻出口节点的原状态值是已执行状态值时,判断所述第一当前相邻出ロ节点的所有相邻出ロ节点中是否存在未被执行过的相邻出口节点; 第五处理模块,用于当所述第七判断模块判断所述第一当前相邻出口节点的所有相邻出口节点中存在未被执行过的相邻出口节点时,将所述第一当前相邻出口节点的所有未被执行过的相邻出口节点中的一个相邻出口节点作为第二当前相邻出口节点,然后通知所述第六判断模块执行判断所述第二当前相邻出口节点的原状态值是否是已执行状态值的步骤; 第二运算模块,用于当所述第六判断模块判断所述第二当前相邻出口节点的原状态值不是已执行状态值时,将所述第二当前相邻出口节点的原状态值与所述第一当前相邻出口节点的当前状态值进行或运算,得到或运算结果值; 第八判断模块,用于当所述第二运算模块得到或运算结果值后,判断所述第二当前相邻出口节点的原状态值与所述第一当前相邻出口节点的当前状态值的或运算结果值与所述第二当前相邻出口节点的原状态值是否相等; 第六处理模块,用于当所述第八判断模块判断所述第二当前相邻出口节点的原状态值 与所述第一当前相邻出口节点的当前状态值的或运算结果值与所述第二当前相邻出口节点的原状态值相等时,通知所述第七判断模块执行判断所述第一当前相邻出口节点的所有相邻出口节点中是否存在未被执行过的相邻出口节点的步骤; 第七处理模块,用于当所述第八判断模块判断所述第二当前相邻出口节点的原状态值与所述第一当前相邻出口节点的当前状态值的或运算结果值与所述第二当前相邻出口节点的原状态值不相等时,将所述第二当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为所述第二当前相邻出口节点的当前状态值; 第九判断模块,用于当所述第七处理模块将所述第二当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为所述第二当前相邻出口节点的当前状态值后,判断是否能够搜索到所述第二当前相邻出口节点的相邻出口节点; 第八处理模块,用于当所述第九判断模块判断能够搜索到所述第二当前相邻出口节点的相邻出口节点后,将所述第二当前相邻出口节点作为第一当前相邻出口节点,将搜索到的所述第二当前相邻出口节点的所有相邻出口节点中的一个相邻出口节点作为第二当前相邻出口节点,然后通知所述第六判断模块执行判断所述第二当前相邻出口节点的原状态值是否是已执行状态值的步骤; 第十判断模块,用于当所述第九判断模块判断不能够搜索到所述第二当前相邻出口节点的相邻出口节点时,判断所述第一当前相邻出口节点的所有相邻出口节点中是否存在未被执行过的相邻出口节点; 第九处理模块,用于当所述第十判断模块判断所述第一当前相邻出口节点的所有相邻出口节点中存在未被执行过的相邻出口节点时,将所述第一当前相邻出口节点的所有未被执行过的相邻出口节点中的一个相邻出口节点作为第二当前相邻出口节点,然后通知所述第六判断模块执行判断所述第二当前相邻出口节点的原状态值是否是已执行状态值的步骤。
9.根据权利要求8所述的判断流程图中是否存在循环回路的装置,其特征在于,所述装置还包括 第十处理模块,用于当所述第七判断模块判断所述第一当前相邻出口节点的所有相邻出口节点中不存在未被执行过的相邻出口节点后,通知所述第四判断模块执行判断所述当前节点的所有入口节点中是否存在状态值为已搜索状态值的节点的步骤。
10.根据权利要求6-9中任意一项权利要求所述的判断流程图中是否存在循环回路的装置,其特征在于,所述装置还包括 第二证明模块,用于当所述第四判断模块 判断当前节点的所有入口节点中不存在状态值为已搜索状态值的节点后,证明将所述第一当前相邻出口节点作为所述当前节点的流转节点时,不存在循环回路。
全文摘要
本发明公开了一种判断流程图中是否存在循环回路的方法和装置,属于计算机技术领域。方法包括根据流程图中每个节点的状态和预设的节点状态与状态值之间的对应关系,得到流程图中每个节点的状态值;将当前节点的所有相邻出口节点中的一个相邻出口节点作为第一当前相邻出口节点;将第一当前相邻出口节点的原状态值与已搜索状态值进行或运算,得到或运算结果值;如果或运算结果值与原状态值不相等,则将或运算结果值作为第一当前相邻出口节点的当前状态值;如果搜索但不能够搜索到第一当前相邻出口节点的相邻出口节点,且当前节点的所有入口节点中存在状态值为已搜索状态值的节点时,则证明将第一当前相邻出口节点作为当前节点的流转节点时存在循环回路。
文档编号G06F11/00GK102654842SQ20111005054
公开日2012年9月5日 申请日期2011年3月2日 优先权日2011年3月2日
发明者蒋建波 申请人:深圳市金蝶中间件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1