/// <summary> /// Test to find all Sub Graphs from a Disconnected Graph from list of all Edges and nodes of a Graph. /// </summary> private static void Test_FindAll_SubGraphs_From_Undirected_Disconnected_Graph_ByEdges() { // 0 // / \ // 1 2 // / // 3 4-6 // \ // 5 7 UndirectedGraph<int> graph = new UndirectedGraph<int>(); Node<int> node = new Node<int>(0); Node<int> node1 = new Node<int>(1); Node<int> node2 = new Node<int>(2); Node<int> node3 = new Node<int>(3); List<Node<int>> nodes = new List<Node<int>>(); nodes.Add(node); nodes.Add(node1); nodes.Add(node2); nodes.Add(node3); Node<int> node4 = new Node<int>(4); Node<int> node5 = new Node<int>(5); Node<int> node6 = new Node<int>(5); Node<int> node7 = new Node<int>(5); //nodes.Add(node4); //nodes.Add(node5); //nodes.Add(node6); nodes.Add(node7); List<Edge<int>> edges = new List<Edge<int>>(); // Add Edges 0-1 Edge<int> edge = new Edge<int>(); edge.StartNode = node; edge.EndNode = node1; edges.Add(edge); //0-2 edges.Add(new Edge<int>() { StartNode = node, EndNode = node2 }); ////2-3 //edges.Add(new Edge<int>() //{ // StartNode = node2, // EndNode = node3 //}); ////3-5 //edges.Add(new Edge<int>() //{ // StartNode = node3, // EndNode = node5 //}); ////4-6 //edges.Add(new Edge<int>() //{ // StartNode = node5, // EndNode = node6 //}); // Traverse all nodes and its vertices List<UndirectedGraph<int>> resultGraphs = graph.GetAllConnectedSubGraphs(nodes, edges); foreach (UndirectedGraph<int> rgraph in resultGraphs) { Console.WriteLine("\nNew Graph ->"); foreach (var rnode in rgraph.ConnectedNodes) { Console.Write(rnode.Value + " ->"); } } }