Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在DFS中的某个深度实现切断_Java_Search_Depth First Search - Fatal编程技术网

Java 在DFS中的某个深度实现切断

Java 在DFS中的某个深度实现切断,java,search,depth-first-search,Java,Search,Depth First Search,我有这段代码,我想实现一个深度限制,我如何在这里实现它?我能否以某种方式存储当前深度,并将其与给定的限制进行比较?如果是,我该怎么做? 谢谢 import java.util.List; 导入java.util.ArrayList; 导入java.util.Stack; 接口目标函数 { 布尔求值(顶点o); } 公共类顶点 { 私有最终T数据; 私有最终列表_=新的ArrayList(); 顶点(T数据){this.data=data;} T getData(){return data;} 列

我有这段代码,我想实现一个深度限制,我如何在这里实现它?我能否以某种方式存储当前深度,并将其与给定的限制进行比较?如果是,我该怎么做? 谢谢

import java.util.List;
导入java.util.ArrayList;
导入java.util.Stack;
接口目标函数
{
布尔求值(顶点o);
}
公共类顶点
{
私有最终T数据;
私有最终列表_=新的ArrayList();
顶点(T数据){this.data=data;}
T getData(){return data;}
列出继任者(){return\u继任者;}
公共静态布尔深度优先搜索(顶点开始,
goal函数是goal,
堆栈结果)
{
if(result.contains(start))
{
返回false;
}
结果:推(启动);
if(isGoal.evaluate(start))
{
返回true;
}
对于(顶点v:start.successivers()){
if(深度优先搜索(v、isGoal、result))
{
返回true;
}
}
//找不到路径
result.pop();
返回false;
}
公共静态列表petersenGraph()
{
列表v=新的ArrayList();
对于(int i=0;i<10;i++)
{
v、 添加(新顶点(i));
}
int[][]边=
{{0,1}, {1,0}, {1,2}, {2,1}, {2,3}, {3,2}, {3,4}, {4,3}, {4,0}, {0,4},
{5,6}, {6,5}, {6,7}, {7,6}, {7,8}, {8,7}, {8,9}, {9,8}, {9,5}, {5,9},
{5,0}, {0,5}, {6,2}, {2,6}, {7,4}, {4,7}, {8,1}, {1,8}, {9,3}, {3,9}};
对于(int[]e:边)
{
v、 get(e[0]).successivers().add(v.get(e[1]);
}
返回v;
}
公共静态void main(字符串[]args)
{
列表v=彼得森图();
堆栈路径=新堆栈();
if(depthFirstSearch(v.get(0),newGoalFunction(){
公共布尔求值(顶点v)
{
返回v.getData()==7;
}
},路径(
{
System.out.print(“找到的路径:”);
用于(顶点u:路径)
{
System.out.print(u.getData()+);
}
System.out.println();
}
其他的
{
System.out.println(“未找到路径”);
}
}
}

使用递归重新实现DFS。将递增值传递给DFS的递归函数:

   void recursive(int depth, .. parameters) {
     if (depth > CUT_OFF)
       return;
     ..        
     recursive(depth+1, parameters1);
     recursive(depth+1, parameters2);
   }

然后您知道当前深度,可以在任何级别打破它。

如果有效,您能接受这个答案吗?点击分数下面的V字母。
   void recursive(int depth, .. parameters) {
     if (depth > CUT_OFF)
       return;
     ..        
     recursive(depth+1, parameters1);
     recursive(depth+1, parameters2);
   }