public static BE.Graph Isolate(BE.Graph graph, string root) { var edges = new List <BE.Edge>(); AddDescendents(edges, graph, root); return(new BE.Graph { Nodes = GetNodes(edges), Edges = edges.ToArray() }); }
private static void AddDescendents(List <BE.Edge> edges, BE.Graph graph, string root) { var more = graph.Edges .Where(edge => edge.Source.Equals(root) && !edges.Exists(o => o.Source.Equals(edge.Source) && o.Target.Equals(edge.Target))) .ToList(); if (more.Count > 0) { edges.AddRange(more); foreach (var edge in more) { AddDescendents(edges, graph, edge.Target); } } }
internal static string GraphToTgf(BE.Graph graph) { var nodes = graph.Nodes; var edges = graph.Edges; var sb = new StringBuilder(); for (var i = 0; i < nodes.Length; i++) { sb.AppendFormat("{0} {1}", i, nodes[i]); sb.AppendLine(); } sb.AppendLine("#"); foreach (var edge in edges) { sb.AppendFormat("{0} {1}", Array.IndexOf(nodes, edge.Source), Array.IndexOf(nodes, edge.Target)); sb.AppendLine(); } return(sb.ToString()); }