本文主要是介绍JAVA代码—算法基础:马走8×8棋盘问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
经典问题:给定一个8×8棋盘,马从任意位置开始,走“日”字,不重复的走完棋盘上的所有位置。
如图所示:
假设从坐标为(2,2)的点开始走,有8个方向可以选择。所以每次都要依据这最多8个方向进行选择。
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。在处理马踏棋盘问题时,每次在至多8个可选的方向中,首先通过验证其中一个方向可以成功。贪心算法同样是试探至多的八个可能的出口,但是八个出口的排序并非按照前述的顺时针,而是按照每个可能出口的进一步出口数的递增排序,所以每次先试探的总是进一步出口较少的出口,能够给之后的出口更多的选择,因此贪心算法是比较高效的,而且它不回溯。
package com.bean.knightcruise;import java.util.Scanner;public class KnightCruise2 {/** 马踏棋盘问题:(贪婪法求解) 棋盘有64个位置,“日”字走法,刚好走满整个棋盘* 贪婪的算法则是一步一步依据当前最优的策略,依靠每一步的局部最优,达到最终目标。但是他不一定能够得到最优解。* 关于马踏棋盘的基本过程:国际象棋的棋盘为8*8的方格棋盘。* 现将”马”放在任意指定的方格中,按照”马”走棋的规则将”马”进行移动。* 要求每个方格只能进入一次,最终使得”马”走遍棋盘的64个方格。* 如图所示,任意一个位置,“马”最多有8个方向可以跳动,所以每次都要依据这最多8个方向进行选择。* * 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,* 选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。* 在处理马踏棋盘问题时,每次在至多8个可选的方向中,首先通过验证其中一个方向可以成功。* 贪心算法同样是试探至多的八个可能的出口,但是八个出口的排序并非按照前述的顺时针,* 而是按照每个可能出口的进一步出口数的递增排序,所以每次先试探的总是进一步出口较少的出口,* 能够给之后的出口更多的选择,因此贪心算法是比较高效的,而且它不回溯。*/static
这篇关于JAVA代码—算法基础:马走8×8棋盘问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!