Итеративный Углубляющийся Поиск

#c#

Вопрос:

Как я могу создать экземпляр дерева в основном методе и обойти его с помощью этого алгоритма?

Я не могу найти, как обойти ограничения класса и IComparable здесь, потому что он не принимает мои пользовательские классы ключей и значений или любую другую предварительно созданную коллекцию, и я получаю «Нет неявного преобразования из IterativeDeepeningSearch.Ключ к » Системе.Я несравнимаКлавиша>'».

«IterativeDeepeningSearch» — это имя имени пространства имен.

Любая помощь будет очень признательна. Заранее спасибо.

 public class Tree<K, V>
     where K : class, IComparable<K>
     where V : class
    {
        private Node<K, V> root;

        /// <summary>
        /// Searches tree using BFS but the depth of the search
        /// is limited. Level of root is 0.
        /// </summary>
        /// <param name="root">To start the search</param>
        /// <param name="goal"></param>
        /// <param name="depth">Maximum depth of level to search</param>
        /// <returns>Default of V if key is not found</returns>
        public V DepthLimitedSearch(Node<K, V> root, K goal, int depth)
        {
            if (depth == 0 amp;amp; root.key == goal)
            {
                return root.value;
            }
            else if (depth > 0)
            {
                foreach (var child in root.children)
                {
                    var result = DepthLimitedSearch(child, goal, depth - 1);
                    if (result != default(V))
                    {
                        return resu<
                    }
                }
                return default(V);
            }
            else
            {
                return default(V);
            }
        }

        public V IterativeDeepeningSearch(K key, int depth)
        {
            for (int currentDepth = 0; currentDepth <= depth; currentDepth  )
            {
                var v = DepthLimitedSearch(root, key, currentDepth);
                if (v != default(V))
                {
                    return v;
                }
            }
            return default(V);
        }

        public class Node<K, V>
            where K : class, IComparable<K>
            where V : class
        {
            public K key;
            public V value;
            public Node<K, V>[] children;
        }
    }
 

Комментарии:

1. Не может размножаться, см. dotnetfiddle.net/sXte4h . Или это другой класс IterativeDeepeningSearch.Key , который не реализует IComparable ? Есть еще кое-что неправильное: вам нужно переодеться root.key == goal root.key.Equals(goal) . И если вы гнездитесь Node внутри Tree<K, V> , то вам не следует повторно K объявлять и V дальше Node

2. Спасибо за ответ. В итоге я полностью изменил его и использовал новый алгоритм.