#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. Спасибо за ответ. В итоге я полностью изменил его и использовал новый алгоритм.