//加入连边 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); }
//移除连边 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); }
//返回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); }
//返回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); }
//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); }
//去除连边 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); }
//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); }
//增加连边 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); }