예제 #1
0
파일: Graph.cs 프로젝트: Dainter/CNSP-Teuto
 //加入连边
 public bool AddEdge(IfCoreNode curNode, IfCoreNode tarNode, IfCoreEdge newEdge)
 {
     try
     {
         //连边的头指针指向起节点
         newEdge.Start = curNode;
         //连边的尾指针指向目标节点
         newEdge.End = tarNode;
     }
     catch (Exception e)
     {//如果连边和起始/目标节点类型不匹配则会报错
         MessageBox.Show(e.Message, "警告", MessageBoxButtons.OK);
         return(false);
     }
     //将新连边加入起始节点的outbound
     if (curNode.AddEdge(newEdge) == false)
     {
         return(false);
     }
     //将新连边加入目标节点的Inbound
     if (tarNode.RegisterInbound(newEdge) == false)
     {
         return(false);
     }
     //全部完成后将连边加入网络连边列表
     EdgeList.Add(newEdge);
     return(true);
 }
예제 #2
0
파일: Graph.cs 프로젝트: Dainter/CNSP-Teuto
        //移除连边
        public bool RemoveEdge(IfCoreNode curNode, IfCoreNode tarNode)
        {
            IfCoreEdge curEdge = null;

            //从起始节点的出边中遍历
            foreach (IfCoreEdge edge in curNode.OutBound)
            {     //查找终止节点编号和目标节点编号一致的连边
                if (edge.End.Number == tarNode.Number)
                { //找到则返回,本图数据库不支持两点间多连边
                    curEdge = edge;
                    break;
                }
            }
            if (curEdge == null)
            {//没找到直接返回
                return(false);
            }
            //起始节点Outbound中移除连边
            curNode.RemoveEdge(curEdge);
            //从终止节点InBound中注销连边
            tarNode.UnRegisterInbound(curEdge);
            //全部完成后,从总连边列表中移除该边
            EdgeList.Remove(curEdge);
            return(true);
        }
예제 #3
0
파일: Node.cs 프로젝트: Dainter/CNSP-Teuto
 //返回InBound是否包含和目标节点间的连边
 bool InBoundContainsEdge(IfCoreEdge newEdge)
 {
     if (InLink.Contains(newEdge))
     {
         return(true);
     }
     foreach (IfCoreEdge edge in InLink)
     {
         if (edge.Start.Number == newEdge.Start.Number)
         {
             return(true);
         }
     }
     return(false);
 }
예제 #4
0
파일: Node.cs 프로젝트: Dainter/CNSP-Teuto
 //返回OutBound是否包含和目标节点间的连边
 bool OutBoundContainsEdge(IfCoreEdge newEdge)
 {
     if (OutLink.Contains(newEdge))
     {
         return(true);
     }
     foreach (IfCoreEdge edge in OutLink)
     {
         if (edge.End.Number == newEdge.End.Number)
         {
             return(true);
         }
     }
     return(false);
 }
예제 #5
0
파일: Node.cs 프로젝트: Dainter/CNSP-Teuto
 //Inbound注销
 public bool UnRegisterInbound(IfCoreEdge curEdge)
 {
     if (curEdge == null)
     {
         return(false);
     }
     //检测条件:当前边的起始节点不是本节点,且终止节点是本节点
     if (curEdge.End.Number != intNodeNum || curEdge.Start.Number == intNodeNum)//检测条件:当前节点与目标节点不相连,且目标节点不是当前节点
     {
         return(false);
     }
     //如果Inbound不包含当前边则不注销
     if (InBoundContainsEdge(curEdge) == false)
     {
         return(false);
     }
     InLink.Remove(curEdge);
     return(true);
 }
예제 #6
0
파일: Node.cs 프로젝트: Dainter/CNSP-Teuto
 //去除连边
 public bool RemoveEdge(IfCoreEdge curEdge)
 {
     if (curEdge == null)
     {
         return(false);
     }
     //检测条件:当前边的起始节点是本节点,且终止节点不是本节点
     if (curEdge.Start.Number != intNodeNum || curEdge.End.Number == intNodeNum)
     {
         return(false);
     }
     //如果OutbOund不包含该边则退出
     if (OutBoundContainsEdge(curEdge) == false)
     {
         return(false);
     }
     OutLink.Remove(curEdge);
     return(true);
 }
예제 #7
0
파일: Node.cs 프로젝트: Dainter/CNSP-Teuto
 //Inbound边注册
 public bool RegisterInbound(IfCoreEdge newEdge)
 {
     if (newEdge == null)
     {
         return(false);
     }
     //检测条件:当前边的起始节点不是本节点,且终止节点是本节点
     if (newEdge.End.Number != intNodeNum || newEdge.Start.Number == intNodeNum)
     {
         return(false);
     }
     //如果Inbound包含该边则不注册
     if (InBoundContainsEdge(newEdge) == true)
     {
         return(false);
     }
     //加入新边
     InLink.Add(newEdge);
     return(true);
 }
예제 #8
0
파일: Node.cs 프로젝트: Dainter/CNSP-Teuto
 //增加连边
 public bool AddEdge(IfCoreEdge newEdge)
 {
     if (newEdge == null)
     {
         return(false);
     }
     //检测条件:当前边的起始节点是本节点,且终止节点不是本节点
     if (newEdge.Start.Number != intNodeNum || newEdge.End.Number == intNodeNum)
     {
         return(false);
     }
     //如果OutbOund已经包含该边
     if (OutBoundContainsEdge(newEdge) == true)
     {
         return(false);
     }
     //向Links中加入新项目
     OutLink.Add(newEdge);
     return(true);
 }