Я хотел бы иметь возможность проверить, подключен ли конкретный узел к корневому узлу напрямую или косвенно.Приведенный ниже код работает в некоторой степени, но довольно часто не удается найти корень (когда это очевидно, он должен).
РЕДАКТИРОВАТЬ: использование слова корня в этом посте не относится к каким-либо зарезервированным термином и являетсятолько спонтанное имя для логической переменной, которая помечает узел как «специальный».
Пока:
//The node
public class Node
{
public Node[] connectedNodes;
public bool rootNode;
}
//The function
public static bool HasRootNode(Node fromNode)
{
List<Node> Processed = new List<Node>();
Stack<Node> WorkStack = new Stack<Node>(FromNode.connectedNodes);
Processed.Add(fromNode);
while (WorkStack.Count != 0)
{
Node workItem = WorkStack.Pop();
foreach (Node cNode in workItem.connectedNodes)
{
if (Processed.Contains(cNode))
continue;
if (cNode.rootNode)
return true; // Found..
WorkStack.Push(cNode); // Queue all of the connectedNodes for this node
Processed.Add(cNode); // This node has been processed..
}
}
return false; // Not found..
}
Оцените любую помощь!