Пример #1
0
        public GangStateNode DLS(GangStateNode node, int depth) // метод поиска вглубь с ограничением глубины
        {
            if (depth == 0 && node.IsSolution())                // проверяем есть ли состояние искомым, когда текущая глубина равна нулю
            {
                return(node);
            }
            else if (depth > 0)
            {
                var moves = node.GetPossibleMoves(); // высчитываем все возможные ходы из данного состояния

                foreach (var child in moves)         // рекурсивного проходим по ним до заданной глубины, проверяем на наличие искомого состояния
                {
                    if (child.Equals(node.Parent))
                    {
                        continue;
                    }
                    var result = DLS(child, depth - 1);
                    if (result != null)
                    {
                        return(result);
                    }
                    else
                    {
                        continue;
                    }
                }
                return(null);
            }
            else
            {
                return(null);
            }
        }
Пример #2
0
        static void Main(string[] args)
        {
            Solver solver = new Solver();                      // создаем решатор
            var    path   = solver.IDDFS(new GangStateNode()); // решаем задачу, возвращается путь

            int n = 1;

            foreach (var state in path) // выводим путь в консоль
            {
                GangStateNode nextState = state;

                Console.WriteLine(n.ToString() + " ");

                if (nextState.IsSolution())
                {
                    Console.WriteLine("Solution");
                }

                Console.WriteLine(nextState.MyToString());
                n++;
            }

            Console.ReadKey();
        }