Java 使用my DFS进行迭代深化搜索
我有一个DFS搜索,现在我正试图用这个DFS实现迭代深化搜索,但我真的不明白我应该怎么做。我试过很多方法,但最后我发现它是错误的!你有什么建议,我应该做什么改变Java 使用my DFS进行迭代深化搜索,java,search,iterative-deepening,Java,Search,Iterative Deepening,我有一个DFS搜索,现在我正试图用这个DFS实现迭代深化搜索,但我真的不明白我应该怎么做。我试过很多方法,但最后我发现它是错误的!你有什么建议,我应该做什么改变 public void dfs() { Stack s=new Stack(); s.push(this.rootNode); rootNode.visited=true; printNode(rootNode); while(!s.isEmpty(
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();
}
好吧,让我们试试看 您需要更改函数以限制搜索深度。为了防止较低级别的节点被多次打印,我将仅以最大深度打印节点 这使得:
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();
}
公共无效ID(整数限制)
{
对于(int n=1;n您的dfs函数没有搜索任何内容,它只是遍历整个图形。是的,这是正确的,而且我也希望进行相同的迭代深化搜索如果没有达到目标,那么进行ids是没有意义的?在每个级别中,它都完全运行dfs。级别0、1、2……的dfs分别运行。@user2944170您是什么数据结构遍历?二叉树还是其他什么?非常感谢。非常有用!终于成功了。您的更改非常小且整洁。tnx