/// <summary>
 /// Creates a node with the user defined value, user defined IColl<T> of neighbors.
 /// </summary>
 /// <param name="val"></param>
 /// <param name="neighbors"></param>
 public MyNode(T val, ICollection <MyNode <T> > neighbors)
 {
     VALUE = val;
     foreach (MyNode <T> node in neighbors)
     {
         NEIGHBORS.Add(node);
     }
     VISITED = false;
 }
 /// <summary>
 /// Takes in avalue and enumerable of neighboring nodes
 /// </summary>
 /// <param name="val"></param>
 /// <param name="neighborNodes"></param>
 public MyNode(T val, IEnumerable <MyNode <T> > neighborNodes)
 {
     VALUE = val;
     foreach (MyNode <T> node in neighborNodes)
     {
         NEIGHBORS.Add(node);
     }
     VISITED = false;
 }
        public bool RemoveConnections(IEnumerable <MyNode <T> > nodesToBeDisconnected)
        {
            bool allRemovalsSuccesfull = true;

            foreach (MyNode <T> node in nodesToBeDisconnected)
            {
                if (!NEIGHBORS.Remove(node))
                {
                    allRemovalsSuccesfull = false;
                }
            }
            return(allRemovalsSuccesfull);
        }
        public bool AddConnections(IEnumerable <MyNode <T> > nodesToBeConnectedWith)
        {
            bool allAddsWentThrough = true;

            foreach (MyNode <T> node in nodesToBeConnectedWith)
            {
                if (!NEIGHBORS.Add(node))
                {
                    allAddsWentThrough = false;
                }
            }
            return(allAddsWentThrough);
        }
 /// <summary>
 /// Checks all node values for equality
 /// </summary>
 /// <param name="other"></param>
 /// <returns></returns>
 public bool Equals(MyNode <T> other)
 {
     return(VALUE.Equals(other.VALUE) && VISITED.Equals(other.VISITED) && NEIGHBORS.Equals(other.NEIGHBORS));
 }
 /// <summary>
 /// Removes a node from this node's Neighbors
 /// </summary>
 /// <param name="nodeToBeDisconnected"></param>
 /// <returns></returns>
 public bool RemoveConnection(MyNode <T> nodeToBeDisconnected)
 {
     return(NEIGHBORS.Remove(nodeToBeDisconnected));
 }
 /// <summary>
 /// Adds a single node to this node's neighbors
 /// </summary>
 /// <param name="nodeToBeConnectedWith"></param>
 /// <returns>True: addition was succesful; False: addition was not successful</returns>
 public bool AddConnection(MyNode <T> nodeToBeConnectedWith)
 {
     return(NEIGHBORS.Add(nodeToBeConnectedWith));
 }