public static List <List <Vector3> > ConnectEdges(List <Edge> edges) { var result = new List <List <Vector3> >(); var connected = new ConnectedEdges(edges, 0); var shouldConnectThings = true; while (shouldConnectThings) { var couldConnectAnything = true; var randomUnconnectedIndex = -1; while (couldConnectAnything) { couldConnectAnything = false; randomUnconnectedIndex = -1; for (int edgeIndex = 1; edgeIndex < edges.Count; ++edgeIndex) { if (!connected.Contains(edgeIndex)) { if (connected.TryConnect(edgeIndex)) { couldConnectAnything = true; } else { randomUnconnectedIndex = edgeIndex; } } } } result.Add(connected.GetVerts()); shouldConnectThings = false; if (randomUnconnectedIndex != -1) { connected.Start(randomUnconnectedIndex); shouldConnectThings = true; } } return(result); }