马走日算法

本文介绍了如何利用回溯法解决马走日问题。回溯法是一种类似于枚举的搜索尝试过程,通过深度优先遍历解空间来寻找问题的解。在马走日问题中,定义了马的下一步可能位置,以及搜索规则和剪枝函数,以避免无效搜索。代码实现了一个5x5棋盘的马走日问题,记录并输出了所有可能的走法总数。
摘要由CSDN通过智能技术生成
 回溯法
 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]
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值