/// <summary> /// Running Time = O(n + m) linear time /// </summary> public static void DepthFirstSearch(List<Vertex> vertices, Vertex startVertex, Vertex leader, ref int counter) { startVertex.IsExplored = true; startVertex.Leader = leader; foreach (var edge in startVertex.Edges) { var newVertex = vertices.Find((x) => x.Number == edge); if (!newVertex.IsExplored) { DepthFirstSearch(vertices, newVertex, leader, ref counter); } } counter++; startVertex.Label = counter.ToString(); }
private static void MergeTwoVertices(List<Vertex> vertices, Vertex v1, Vertex v2) { for (int i = 0; i < vertices.Count; i++) { if (vertices[i].Number != v2.Number) { for (int j = 0; j < vertices[i].Edges.Count; j++) { if (vertices[i].Edges[j] == v2.Number) vertices[i].Edges[j] = v1.Number; } } } for (int i = 0; i < v2.Edges.Count; i++) { v1.Edges.Add(v2.Edges[i]); } vertices.Remove(v2); }