public static List <Node> GetAvailableNodes(Node parent, Location destination)
        {
            List <Node>     result         = new List <Node>();
            List <Location> availableMoves = RedKnight.AvailableMoves(parent.Location);

            foreach (Location l in availableMoves)
            {
                //Console.WriteLine("{0} {1}", l.X, l.Y);
                Node n = new Node(l.X, l.Y);
                n.Parent = parent;

                if (!visitedNodes.Contains(n))
                {
                    result.Add(n);
                    visitedNodes.Add(n);
                }
            }

            return(result);
        }
 public static void PrintResult(List <Node> path)
 {
     if (path != null && path.Count > 1) //valid path
     {
         Console.WriteLine(path.Count - 1);
         for (int c = 0; c < path.Count - 1; c++)
         {
             Console.Write(RedKnight.GetMoveName(path[c].Location.X, path[c].Location.Y, path[c + 1].Location.X, path[c + 1].Location.Y));
             if (c < path.Count - 2)
             {
                 Console.Write(" ");
             }
             //Console.WriteLine("{1} {0} to {3} {2}, move Type: {4}",
             //    path[c].Location.X, path[c].Location.Y,
             //    path[c + 1].Location.X, path[c + 1].Location.Y,
             //    RedKnight.GetMoveName(path[c].Location.X,
             //    path[c].Location.Y, path[c + 1].Location.X, path[c + 1].Location.Y));
         }
     }
     else
     {
         Console.WriteLine("Impossible");
     }
 }