第五章 工作流图形定义工具(九)-- 递归算法的使用

本文介绍了一种用于检查工作流中并行分支是否正确对称的方法。通过递归算法检查AndSplit与OrSplit节点,确保流程图逻辑的一致性和正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

5.7 开发工作流图形定义工具

5.7.6 图形工具主界面程序

    ......(接前页)

          //定义临时迁移数组

        

  private TransitionRecords temptranarray=null;
          private NodeClass nextnode=null;
          //And Split过程逻辑节点的递归检查函数,如果存在嵌套或不对称则返回true  
          private bool AndNestedCheck(NodeClass tempnode)
          {

              //如果参数节点tempnode是逻辑节点
              if(tempnode.NodeType == nodetypedefine.andsplit ||

                     tempnode.NodeType == nodetypedefine.andjoin ||

                      tempnode.NodeType == nodetypedefine.orsplit ||

                       tempnode.NodeType == nodetypedefine.orjoin)
              {
                  //如果参数节点tempnode是andjoin则表示当前并行分支不存在嵌套
                  if(tempnode.NodeType == nodetypedefine.andjoin)
                      return false;
                  else
                      return true;
              }

              //如果参数节点tempnode不是逻辑节点,则递归检查其后继节点
              else
              {
                  temptranarray=transitionarray.GetFromNodeTransition(tempnode.NodeName);
                  //如果temptranarray为空,表示已经检查到end节点仍未发现逻辑节点,则表示不符合

                  //逻辑节点的对称性,返回true。
                  if(temptranarray == null)
                      return true;
                  else
                  {
                      nextnode=nodearray.GetNode(temptranarray.GetTransition(0).ToNode);//之所

                          //以使用GetTransition(0),是因为非逻辑节点的后继只有一个。

                      //递归检查
                      return AndNestedCheck(nextnode);
                  }
              }
          }
          //orsplit递归检查
          private TransitionRecords temptranarrayb=null;
          private NodeClass nextnodeb=null;
          private bool OrNestedCheck(NodeClass tempnode)
          {

              //如果参数节点tempnode是逻辑节点
              if(tempnode.NodeType == nodetypedefine.andsplit ||

                       tempnode.NodeType == nodetypedefine.andjoin ||

                       tempnode.NodeType == nodetypedefine.orsplit ||

                       tempnode.NodeType == nodetypedefine.orjoin)
              {
                  //如果参数节点tempnode是orjoin则表示当前并行分支不存在嵌套
                  if(tempnode.NodeType == nodetypedefine.orjoin)
                      return false;
                  else
                      return true;
              }

              //如果参数节点tempnode不是逻辑节点,则递归检查其后继节点
              else
              {
                  temptranarrayb=transitionarray.GetFromNodeTransition(tempnode.NodeName);
                  //如果temptranarrayb为空,表示已经检查到end节点仍未发现逻辑节点,则表示不符

                  //合逻辑节点的对称性,返回true。
                  if(temptranarrayb == null)
                       return true;
                  else
                  {
                      nextnodeb=nodearray.GetNode(temptranarrayb.GetTransition(0).ToNode);//之

                            // 所以使用GetTransition(0),是因为非逻辑节点的后继只有一个。

                      //递归检查
                      return OrNestedCheck(nextnodeb);
                  }
               }
           }//OrNestedCheck(NodeClass tempnode)
        }//public class Form1 
    }//namespace drawtaskbytoolbar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值