public void FusionNodes(CGNode Root, List <CGNode> Target) { List <CGNode> deletes = new List <CGNode>(); List <CGRelation> relations_deletes = new List <CGRelation>(); List <CGRelation> relations_news = new List <CGRelation>(); foreach (var node in Target) { if (node.id == Root.id) { continue; } this.NumberOfFusions += 1; Root.AddFusionNode(node); deletes.Add(node); var inrelations = (from c in this.Relations where c.Tail == node.id select c).ToList(); foreach (var item in inrelations) { var n = item.Clone(); n.Tail = Root.id; relations_deletes.Add(item); if (deletes.Where(c => c.id == n.Head).Count() == 0) { relations_news.Add(n); } } var outrelations = (from c in this.Relations where c.Head == node.id select c).ToList(); foreach (var item in outrelations) { var n = item.Clone(); n.Head = Root.id; relations_deletes.Add(item); if (deletes.Where(c => c.id == n.Tail).Count() == 0) { relations_news.Add(n); } } foreach (var item in relations_deletes) { this.RemoveRelation(item); } foreach (var item in relations_news) { this.AddRelation(item); } foreach (var item in deletes) { this.RemoveNode(item); } } }