回溯法
1.定义:类似于枚举的搜索尝试过程,主要是在搜索尝试中寻找问题的解,当发现不满足求解条件时,
就回溯返回,尝试其他的路径。
2.基本思想:图的深度优先遍历,即从根节点出发遍历解空间,当遍历到某一结点时,先判断该节点是否
包含问题的解,若包含,则沿着该结点继续进行深度优先遍历,如果不包含,则回退一步。
3.回溯法解决问题的步骤
(1)针对所给的问题,确定解空间:首先明确问题的解空间,问题的解空间至少包含问题的一个(最优)解。
(2)确定结点的搜索规则
(3)以深度优先方式搜索解空间,并在搜索过程中采用剪枝函数避免无效搜索
public class exercise3 {
//定义马走日的下一位置相对于当前位置的坐标
private static int [][]next=new int[][]{
{1,2},{1,-2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1}};
private static int [][]book;//走过的位置的标记
private static int [][]map;//棋盘的大小
private static int [][]a;//路径信息标号
private static int n,m;
private static int count=0;//记录多少种走法
public static void main(String[] args) {
n=5;
m=5;//棋盘为5*5
int x=0,y=0;//定义初始位置
map=new int[n][m];
book=new int[n][m];
a=new int[n][m];
book[x][y]=1;//标记为起点已访问
dfs(x, y,1);
System.out.printf("总共可能的情况:%3d",count);
}
private static void dfs(int x,
马走日算法
最新推荐文章于 2025-07-10 16:19:17 发布