private bool check(UndirectedGraphNode a, UndirectedGraphNode b)
        {
            if (a == null || b == null)
            {
                return(false);
            }

            HashSet <int> set = new HashSet <int>();
            Queue <UndirectedGraphNode> queue = new Queue <UndirectedGraphNode>();

            queue.Enqueue(a);
            set.Add(a.label);
            while (queue.Count != 0)
            {
                UndirectedGraphNode tmp = queue.Dequeue();
                if (tmp.label == b.label)
                {
                    return(true);
                }
                set.Add(tmp.label);
                foreach (var i in tmp.neighbors)
                {
                    if (i == null)
                    {
                        continue;
                    }
                    if (set.Contains(i.label))
                    {
                        continue;
                    }
                    queue.Enqueue(i);
                }
            }
            return(false);
        }
 public bool checkPath(UndirectedGraphNode a, UndirectedGraphNode b)
 {
     return(check(a, b) || check(b, a));
 }