骑士走棋盘【非递归,贪心,回溯】

 
/*
1:骑士的走法:沿四个方向中的某个方向走两步,然后转90度,即“L”路线。
如果骑士当前坐标是(i,j),骑士可走的位置包括(i+2,j+1)、(i+2,j-1)、
(i-2,j+1)、(i-2,j-1)、(i+1,j+2)、(i-1,j+2)、(i+1,j-2)、(i+1,j-2)八个
位置
2:8*8的棋盘至少走63步,如果用递归的话,就是嵌套至少63层循环,效率不高
3:用栈保存步骤,然后用回溯法。
4:如果人为控制棋子:
(1)记录当前位置,在可走的位置(根据当前位置计算)任选一个【选择步数最少
的一个(贪心算法?)】,移动棋子,并将选择的位置记录为走过的位置(修改标志
为1)
(2)终止条件:棋盘全部标记为1或者回到了初始位置之后没有可供选择的位置
(3)如果当前位置没有可走的位置,将当前位置标志置为0,并将棋子返回到当
前位置的上一个位置
*/
#include "stdio.h"
typedef struct{
 int i;
 int j;
}SNode;
int pass=1;    //记录走过的点数
SNode path[100];  /
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
运 用 贪 心 算 法 ,vc++ 语 言 编 写 , 可 单 步 输 出 结 果 【问题描述】 跳马问题也称骑士遍历、马踏棋盘问题:在8*8方格的棋盘上,从任意指定的方格出发,为象棋中的马寻找一条棋盘每一格并且只经过一次的一条路径。 考虑国际象棋棋盘上某个位置的一只马,它是否可能只63步,正好过除起点外的其他63个位置各一次?如果有一种这样的法,则称所的这条路线为一条马的周游路线。试设计一个算法找出这样一条马的周游路线。 在一个8×8的方格棋盘中,按照国际象棋中马的行规则从棋盘上的某一方格出发,开始在棋盘上周游,如果能不重复地棋盘上的每一个方格, 这样的一条周游路线在数学上被称为国际象棋盘上马的哈密尔顿链。请你设计一个程序,从键盘输入一个起始方格的坐标,由计算机自动寻找并打印 【算法描述】 本题有较多方法求解,在此仅对回溯法进行分析。 一只马在棋盘的某一点,它可以朝8个方向前进,方向向量分别是:(2,1)、(2,-1)、(1,2)、(1,-2)、(-2,1)、(-2,-1)、(-1,2)、(-1,-2)。从中任选择一个方向前进,到达新的位置。在从新的位置选择一个方向前进,继续,直到无法前进为止。无法前进可能有如下原因:下一位置超出边界、下一位置已经被访问过。当马已经无法前进时,就回退到上一位置,从新选择一个新的方向前进;如果还是无法前进,就再回退到上一位置……

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值