我有一个DFS搜索,现在我正在尝试用这个DFS实现迭代加深搜索,但我真的不明白我该怎么办。我尝试了很多方法,但最后我发现这是错的!你有什么建议我应该做些什么改变吗?
public void dfs()
{
Stack s=new Stack();
s.push(this.rootNode);
rootNode.visited=true;
printNode(rootNode);
while(!s.isEmpty())
{
Node n=(Node)s.peek();
Node child=getUnvisitedChildNode(n);
if(child!=null)
{
child.visited=true;
printNode(child);
s.push(child);
}
else
{
s.pop();
}
}
clearNodes();
}
答案 0 :(得分:0)
好的,我们试试吧。
您需要更改功能以限制搜索深度。为防止低级节点被多次打印,我只会打印最大深度的节点。
这给出了:
public void ids(int limit)
{
for (int n = 1; n <= limit; ++n)
{
dfs(n);
}
}
public void dfs(int limit)
{
Stack s=new Stack();
s.push(this.rootNode);
rootNode.visited=true;
while(!s.isEmpty())
{
Node n=(Node)s.peek();
if (stack.size() == limit)
{
printNode(n);
s.pop();
} else {
Node child=getUnvisitedChildNode(n);
if(child!=null)
{
child.visited=true;
s.push(child);
}
else
{
s.pop();
}
}
}
clearNodes();
}