bool CheckCircle(Edges edges) { // YIKANG TODO: https://www.youtube.com/watch?v=n_t0a_8H8VY // 1. make set list VertexSets vertexSetList = new VertexSets(); foreach (KeyValuePair <string, int> one in edges) { for (int i = 0; i < one.Key.Length; i++) { char c = one.Key[i]; if (!vertexSetList.ContainV(c.ToString())) { VertexSet set = new VertexSet(); set.AddV(c.ToString()); vertexSetList.Add(set); } } } // 2. go through detected edges, if can find 2 valid different sets, union them; else it is circle foreach (KeyValuePair <string, int> one in edges) { string v1 = one.Key[0].ToString(); string set1 = vertexSetList.FindSet(v1); string v2 = one.Key[1].ToString(); string set2 = vertexSetList.FindSet(v2); if (set1 == set2) { return(true); } else { vertexSetList.Combine(set1, set2); } } return(false); }
public void Union(VertexSet anotherset) { vertexstr += anotherset.vertexstr; }