Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 public void Union(VertexSet anotherset)
 {
     vertexstr += anotherset.vertexstr;
 }