private List<BayesNetNode> getVariableNodes()
{
// TODO dicey initalisation works fine but unclear . clarify
if (variableNodes == null)
{
List<BayesNetNode> newVariableNodes = new List<BayesNetNode>();
List<BayesNetNode> parents = roots;
List<BayesNetNode> traversedParents = new List<BayesNetNode>();
while (parents.Count != 0)
{
List<BayesNetNode> newParents = new List<BayesNetNode>();
foreach (BayesNetNode parent in parents)
{
// if parent unseen till now
if (!(traversedParents.Contains(parent)))
{
newVariableNodes.Add(parent);
// add any unseen children to next generation of parents
List<BayesNetNode> children = parent.getChildren();
foreach (BayesNetNode child in children)
{
if (!newParents.Contains(child))
{
newParents.Add(child);
}
}
traversedParents.Add(parent);
}
}
parents = newParents;
}
variableNodes = newVariableNodes;
}
return variableNodes;
}