公开/公告号CN102654842A
专利类型发明专利
公开/公告日2012-09-05
原文格式PDF
申请/专利权人 深圳市金蝶中间件有限公司;
申请/专利号CN201110050546.4
发明设计人 蒋建波;
申请日2011-03-02
分类号G06F11/00(20060101);
代理机构11138 北京三高永信知识产权代理有限责任公司;
代理人黄厚刚
地址 518057 广东省深圳市南山区高新区中区麻雀岭工业区M-6栋第二层1、3、4区
入库时间 2023-12-18 08:10:40
法律状态公告日
法律状态信息
法律状态
2019-11-01
专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F11/00 变更前: 变更后: 申请日:20110302
专利权人的姓名或者名称、地址的变更
2017-01-04
专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F11/00 变更前: 变更后: 申请日:20110302
专利权人的姓名或者名称、地址的变更
2014-07-30
授权
授权
2012-10-31
实质审查的生效 IPC(主分类):G06F11/00 申请日:20110302
实质审查的生效
2012-09-05
公开
公开
技术领域
本发明涉及计算机技术领域,特别涉及一种判断流程图中是否存在循环回路的方法和装置。
背景技术
图的数据结构在游戏、工作流、图像处理、影像处理等领域有着广泛的应用,图的遍历算法是图的数据结构操作中最重要和最常见的操作之一。流程图是图的一种特例,它是用图的方式描述一段流程。流程图的执行就是一种特殊的遍历,它是从开始节点开始,经过一系列节点,最终到达终止节点的过程。但是因为各种原因,流程图中经常会出现循环回路,也就是正在执行的节点的输出又会反馈回到已经执行过的节点,出现无法跳出的循环。所以为了防止流程图的执行过程中出现无法跳出的循环,每一步流转过程都需要检查是否存在循环回路,避免陷入循环。
现有技术的判断流程图中是否存在循环回路的方法如下:
根据流程图中的节点是否已被执行和是否已被搜索,可以将流程图中的每个节点的状态分为执行状态和搜索状态,其中执行状态包括未执行、已执行、跳过,搜索状态包括已搜索、未搜索。然后使用多个布尔(boolean)类型的标志,或多个普通的数字型或者枚举型的标志,与节点的每个状态分别对应,比如用1表示未执行、2表示已执行、3表示跳过,用4表示已搜索、5表示未搜索。分别对流程图中的当前节点的每一个相邻出口节点进行遍历,并标注遍历后的每个结点的状态,在对某个相邻出口节点进行遍历后,根据标注的每个结点的状态判断将该相邻出口节点作为当前节点的流转节点时是否存在循环回路。根据标注的每个结点的状态判断将该相邻出口节点作为当前节点的流转节点时是否存在循环回路具体是:判断该当前节点的入口节点中是否存在状态为未执行已搜索的节点,或状态为已跳过已搜索的节点,如果存在,则将该相邻出口节点作为当前节点的流转节点时存在循环回路。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
现有技术的方法在判断流程图中是否存在循环回路时,需要将入口节点的执行状态和搜索状态联合起来进行判断,即需要使用多个表达式(expression)联合起来进行判断,判断的方式复杂,判断算法的运行速度慢。
发明内容
为了解决现有技术中的问题,本发明实施例提供了一种判断流程图中是否存在循环回路的方法和装置。所述技术方案如下:
一种判断流程图中是否存在循环回路的方法,所述方法包括:
根据预设的节点状态与状态值之间的对应关系,将流程图中每个节点的状态标注为相应的状态值;
判断是否能够搜索到当前节点的相邻出口节点;
如果能够搜索到当前节点的相邻出口节点,则将搜索到的当前节点的所有相邻出口节点中的一个相邻出口节点作为第一当前相邻出口节点;
将所述第一当前相邻出口节点的原状态值与已搜索状态值进行或运算,得到所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值;
判断所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与所述第一当前相邻出口节点的原状态值是否相等;
如果所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与所述第一当前相邻出口节点的原状态值不相等,则将所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为所述第一当前相邻出口节点的当前状态值;
判断是否能够搜索到所述第一当前相邻出口节点的相邻出口节点;
如果不能够搜索到所述第一当前相邻出口节点的相邻出口节点,则判断所述当前节点的所有入口节点中是否存在状态值为已搜索状态值的节点;
如果所述当前节点的所有入口节点中存在状态值为已搜索状态值的节点,则证明将所述第一当前相邻出口节点作为所述当前节点的流转节点时,存在循环回路。
一种判断流程图中是否存在循环回路的装置,所述装置包括:
标注模块,用于根据预设的节点状态与状态值之间的对应关系,将流程图中每个节点的状态标注为相应的状态值;
第一判断模块,用于当所述标注模块将流程图中每个节点的状态标注为相应的状态值后,判断是否能够搜索到当前节点的相邻出口节点;
第一处理模块,用于当所述第一判断模块判断能够搜索到当前节点的相邻出口节点后,将搜索到的当前节点的所有相邻出口节点中的一个相邻出口节点作为第一当前相邻出口节点;
第一运算模块,用于当所述第一处理模块将搜索到的当前节点的所有相邻出口节点中的一个相邻出口节点作为第一当前相邻出口节点后,将所述第一当前相邻出口节点的原状态值与已搜索状态值进行或运算,得到所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值;
第二判断模块,用于当所述第一运算模块得到所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值后,判断所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与所述第一当前相邻出口节点的原状态值是否相等;
第二处理模块,用于当所述第二判断模块判断所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与所述第一当前相邻出口节点的原状态值不相等时,将所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为所述第一当前相邻出口节点的当前状态值;
第三判断模块,用于当所述第二处理模块将所述第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为所述第一当前相邻出口节点的当前状态值后,判断是否能够搜索到所述第一当前相邻出口节点的相邻出口节点;
第四判断模块,用于当所述第三判断模块判断不能够搜索到所述第一当前相邻出口节点的相邻出口节点时,判断所述当前节点的所有入口节点中是否存在状态值为已搜索状态值的节点;
第一证明模块,用于当所述第四判断模块判断所述当前节点的所有入口节点中存在状态值为已搜索状态值的节点后,证明将所述第一当前相邻出口节点作为所述当前节点的流转节点时,存在循环回路。
本发明实施例提供的技术方案的有益效果是:
通过利用二进制“或(XOR)”运算的特点,通过设置各个节点状态的状态值,实现只需判断一次或运算结果值就可以得知是否存在循环回路,即只需判断一个表达式就可以获得组合判断结果,判断方式简单,提高了判断算法的运行速度。
附图说明
图1是本发明实施例1提供的一种判断流程图中是否存在循环回路的方法流程图;
图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开头的0和1组成的数字来表示二进制数值,比如b100表示二进制数值100。
实施例1
参见图1,本发明实施例提供了一种判断流程图中是否存在循环回路的方法,包括:
101:根据流程图中每个节点的状态和预设的节点状态与状态值之间的对应关系,得到流程图中每个节点的状态值。
102:判断是否能够搜索到当前节点的相邻出口节点。
103:如果能够搜索到当前节点的相邻出口节点,则将搜索到的当前节点的所有相邻出口节点中的一个相邻出口节点作为第一当前相邻出口节点。
104:将第一当前相邻出口节点的原状态值与已搜索状态值进行或运算,得到第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值。
105:判断第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与第一当前相邻出口节点的原状态值是否相等。
106:如果第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与第一当前相邻出口节点的原状态值不相等,将第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为第一当前相邻出口节点的当前状态值。
107:判断是否能够搜索到第一当前相邻出口节点的相邻出口节点。
108:如果不能够搜索到第一当前相邻出口节点的相邻出口节点,则判断当前节点的所有入口节点中是否存在状态值为已搜索状态值的节点。
109:如果当前节点的所有入口节点中存在状态值为已搜索状态值的节点,则证明将第一当前相邻出口节点作为当前节点的流转节点时,存在循环回路。
进一步地,判断第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与第一当前相邻出口节点的原状态值是否相等之后,该方法还包括:
如果第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值与第一当前相邻出口节点的原状态值相等,则判断当前节点的所有相邻出口节点中是否存在未被执行过的相邻出口节点。
如果当前节点的所有相邻出口节点中存在未被执行过的相邻出口节点,则将当前节点的所有未被执行过的相邻出口节点中的一个相邻出口节点作为第一当前相邻出口节点,然后执行将第一当前相邻出口节点的原状态值与已搜索状态值进行或运算的步骤。
进一步地,判断是否能够搜索到第一当前相邻出口节点的相邻出口节点之后,该方法还包括:
如果能够搜索到第一当前相邻出口节点的相邻出口节点,则将搜索到的第一当前相邻出口节点的所有相邻出口节点中的一个相邻出口节点作为第二当前相邻出口节点。
判断第二当前相邻出口节点的原状态值是否是已执行状态值。
如果第二当前相邻出口节点的原状态值是已执行状态值,则判断第一当前相邻出口节点的所有相邻出口节点中是否存在未被执行过的相邻出口节点。
如果第一当前相邻出口节点的所有相邻出口节点中存在未被执行过的相邻出口节点,则将第一当前相邻出口节点的所有未被执行过的相邻出口节点中的一个相邻出口节点作为第二当前相邻出口节点,然后执行判断第二当前相邻出口节点的原状态值是否是已执行状态值的步骤。
进一步地,判断第二当前相邻出口节点的原状态值是否是已执行状态值之后,该方法还包括:
如果第二当前相邻出口节点的原状态值不是已执行状态值,则将第二当前相邻出口节点的原状态值与第一当前相邻出口节点的当前状态值进行或运算,得到或运算结果值。
判断第二当前相邻出口节点的原状态值与第一当前相邻出口节点的当前状态值的或运算结果值与第二当前相邻出口节点的原状态值是否相等。
如果第二当前相邻出口节点的原状态值与第一当前相邻出口节点的当前状态值的或运算结果值与第二当前相邻出口节点的原状态值相等,则执行判断第一当前相邻出口节点的所有相邻出口节点中是否存在未被执行过的相邻出口节点的步骤。
进一步地,判断第二当前相邻出口节点的原状态值与第一当前相邻出口节点的当前状态值的或运算结果值与第二当前相邻出口节点的原状态值是否相等之后,该方法还包括:
如果第二当前相邻出口节点的原状态值与第一当前相邻出口节点的当前状态值的或运算结果值与第二当前相邻出口节点的原状态值不相等,则将第二当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为第二当前相邻出口节点的当前状态值。
判断是否能够搜索到第二当前相邻出口节点的相邻出口节点。
如果能够搜索到第二当前相邻出口节点的相邻出口节点,则将第二当前相邻出口节点作为第一当前相邻出口节点,将搜索到的第二当前相邻出口节点的所有相邻出口节点中的一个相邻出口节点作为第二当前相邻出口节点,然后执行判断第二当前相邻出口节点的原状态值是否是已执行状态值的步骤。
进一步地,判断是否能够搜索到第二当前相邻出口节点的相邻出口节点之后,该方法还包括:
如果不能够搜索到第二当前相邻出口节点的相邻出口节点,则判断第一当前相邻出口节点的所有相邻出口节点中是否存在未被执行过的相邻出口节点。
如果第一当前相邻出口节点的所有相邻出口节点中存在未被执行过的相邻出口节点,则将第一当前相邻出口节点的所有未被执行过的相邻出口节点中的一个相邻出口节点作为第二当前相邻出口节点,然后执行判断第二当前相邻出口节点的原状态值是否是已执行状态值的步骤。
进一步地,判断第一当前相邻出口节点的所有相邻出口节点中是否存在未被执行过的相邻出口节点之后,该方法还包括:
如果第一当前相邻出口节点的所有相邻出口节点中不存在未被执行过的相邻出口节点,则执行判断当前节点的所有入口节点中是否存在状态值为已搜索状态值的节点的步骤。
进一步地,判断当前节点的所有入口节点中是否存在状态值为已搜索状态值的节点之后,该方法还包括:
如果当前节点的所有入口节点中不存在状态值为已搜索状态值的节点,则证明将第一当前相邻出口节点作为当前节点的流转节点时,不存在循环回路。
本发明实施例所述的判断流程图中是否存在循环回路的方法,利用二进制“或(XOR)”运算的特点,通过设置各个节点状态的状态值,实现只需判断一次或运算结果值就可以得知是否存在循环回路,即只需判断一个表达式就可以获得组合判断结果,判断方式简单,提高了判断算法的运行速度。
实施例2
参见图2a和图2b,本发明实施例提供了一种判断流程图中是否存在循环回路的方法,包括:
201:根据流程图中每个节点的状态和预设的节点状态与状态值之间的对应关系,得到流程图中每个节点的状态值。
本发明实施例中,设节点状态包括未执行、已执行、跳过和已搜索。并且预设的节点状态与状态值之间的对应关系如下:未执行对应的状态值为b000、已执行对应的状态值为b111、跳过对应的状态值为b010、已搜索对应的状态值为b110。并且,为了便于描述,将未执行对应的状态值称为未执行状态值、已执行对应的状态值称是已执行状态值、跳过对应的状态值称为跳过状态值、已搜索对应的状态值称为已搜索状态值。
例如,参见图3和图4,根据流程图中每个节点的状态和预设的节点状态与状态值之间的对应关系,将流程图3中每个节点的状态标注为相应的状态值,得到如图4所示的结果。
并且,还可以设置节点状态与状态值之间的对应关系如下:未执行对应的状态值为b0000、已执行对应的状态值为b1110、跳过对应的状态值为b0100、已搜索对应的状态值为b1100。或还可以设置节点状态与状态值之间的对应关系如下:未执行对应的状态值为b0000、已执行对应的状态值为b1101、跳过对应的状态值为b0100、已搜索对应的状态值为b1100。或还可以设置节点状态与状态值之间的对应关系如下:未执行对应的状态值为b00000、已执行对应的状态值为b01101、跳过对应的状态值为b00100、已搜索对应的状态值为b01100。即可以根据实际应用状况设置未执行、已执行、跳过和已搜索的状态值为一组与b000、b111、b010和b110的二进制标志位具有类似对应关系的值。
202:判断是否能够搜索到当前节点的相邻出口节点,如果能够,则执行203;否则,结束。
其中,当前节点是指流程图执行过程中当前执行到的需要判断其的相邻出口节点是否存在循环回路的节点。当前节点的相邻出口节点是指与当前节点相关联的第一个出口节点。
例如,参见图3,其中当前节点为步骤B所在的节点,当前节点的相邻出口节点为步骤C所在的节点。
203:将搜索到的当前节点的所有相邻出口节点中的一个相邻出口节点作为第一当前相邻出口节点。
例如,参见图3,其中当前节点的相邻出口节点只有一个为步骤C所在的节点,则将步骤C所在的节点作为第一当前相邻出口节点。
204:将第一当前相邻出口节点的原状态值与已搜索状态值进行“或(XOR)”运算,得到或运算结果值。
205:判断或运算结果值与第一当前相邻出口节点的原状态值是否相等,如果相等,则执行220;否则,执行206。
例如,参见图3和图4,步骤C所在的节点为第一当前相邻出口节点,则第一当前相邻出口节点的原状态值为b000。将b000与b110进行“或(XOR)”运算,得到或运算结果值b110。从而判断出或运算结果值与第一当前相邻出口节点的原状态值不相等,则执行206。
206:将第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为第一当前相邻出口节点的当前状态值,然后执行207。
例如,参见图3、图4、图5和图6,步骤C所在的节点为第一当前相邻出口节点,且第一当前相邻出口节点的原状态值与已搜索状态值的或运算结果值为b110,从而第一当前相邻出口节点的当前状态值为b110。
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所在的节点)的当前状态值为b110,则第二当前相邻出口节点的原状态值b010与第一当前相邻出口节点的当前状态值b110进行“或(XOR)”运算得到或运算结果值为b110。
211:判断或运算结果值与第二当前相邻出口节点的原状态值是否相等,如果相等,则执行215;否则,执行212。
例如:参见图3、图4、图5和图6,第二当前相邻出口节点(步骤A所在的节点)的原状态值与第一当前相邻出口节点(步骤C所在的节点)的当前状态值的或运算结果值b110,与第二当前相邻出口节点的原状态值b010不相等,从而执行212。
212:将第二当前相邻出口节点的原状态值与已搜索状态值的或运算结果值作为第二当前相邻出口节点的当前状态值,然后执行213。
例如:参见图3、图4、图5和图6,第二当前相邻出口节点(步骤A所在的节点)的原状态值与第一当前相邻出口节点(步骤C所在的节点)的当前状态值的或运算结果值b110,则第二当前相邻出口节点的当前状态值为b110。
213:判断是否能够搜索到第二当前相邻出口节点的相邻出口节点,如果能够,则执行214;否则,执行215。
例如:参见图3、图4、图5和图6,第二当前相邻出口节点(步骤A所在的节点)的相邻出口节点分别为步骤B所在的节点和步骤D所在的节点。
214:将第二当前相邻出口节点作为第一当前相邻出口节点,将搜索到的第二当前相邻出口节点的所有相邻出口节点中的一个相邻出口节点作为第二当前相邻出口节点,然后执行209。
即按照递归算法对第二当前相邻出口节点的出口节点依次进行判断。
例如:参见图3、图4、图5和图6,将步骤B所在的节点作为第二当前相邻出口节点。步骤B所在的节点的状态值为b111(已执行状态值),所以执行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所在的节点的状态值为已搜索状态值(b110),所以执行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)”运算的特点,通过设置各个节点状态的状态值,实现只需判断一次或运算结果值就可以得知是否存在循环回路,即只需判断一个表达式就可以获得组合判断结果,判断方式简单,提高了判断算法的运行速度。
以上实施例提供的技术方案中的全部或部分内容可以通过软件编程实现,其软件程序存储在可读取的存储介质中,存储介质例如:计算机中的硬盘、光盘或软盘。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
机译: 通过ErbB2确定信号转导途径是否存在下调的方法,一种辅助判断是否需要抗癌药和信号转导抑制剂治疗的方法
机译: 一种判断害虫侵害是否存在的方法及一种诱捕装置
机译: 一种存在性判断装置,一种中等判别装置,存在性判断方法和一种中等判别方法