骑士周游世界

骑士周游世界

1.课题阐述
骑士周游世界:
在国际象棋中,骑士以“日”字型的步伐可踏遍棋盘,于是几个世纪前就有人提出:骑士能否从棋盘的任意一格出发,不重复地遍历棋盘上64格,最后回到出发点。
目标:掌握C#编写数据结构的算法,进而完成具有人机交互与计算机绘图的小游戏程序。
基本要求:
(1)通过算法解决骑士的路径规划问题;
(2)绘制上图所示界面,通过菜单进入游戏和显示说明;
(3)完成人机交互,实现骑士的前进和撤回。

2.思路和方法

  • 理论基础
    骑士周游世界也被称为骑士周游世界。将马随机放在国际棋盘的8*8棋的某个方格中,马按走棋规则(马走日字)进行移动。要求每个方格只进入一次,走遍棋盘的64个方格。
  • 算法分析
    骑士周游世界其实是图的深度优先搜索的应用。
    使用回溯(深度优先搜索)来解决,如果马在没有到第64格就已经走到尽头,就只能回退,查看其他路径,整个过程就是在棋盘上不断回溯并最终找到正确路径的过程。
  • 设计流程
    (1)创建棋盘SqQueue,是一个二维数组SqQueue[MAX * MAX]。
    (2)将当前位置为已经访问,然后根据当前位置,计算马还能走到棋盘的哪些位置,并放入到一个集合SqStack中,最多有8个位置,每走一步,就使用step+1。
    (3)遍历SqStack中存放的所有位置,看看哪个可以走通,如果走通就继续,走不通就回溯直到搜索到正确路径。
    (4)运行调试。
  • 代码要点
    (1)利用了A*算法原理,可参照九宫格问题。
    (2)利用二维数组SqQueue[MAX * MAX]实现棋盘的构建,通过调用SqStack
    函数,遍历搜索到正确的棋盘路径。

3.完成情况
只完成了(1)中的通过算法解决骑士的路径规划问题的基本要求,如下图所示:
在这里插入图片描述

5.附件:关键源码

 public partial class Form1 : Form{
   
   const int MAX = 8;
   int[,] direction = {
    {
    -2, 1 }, {
    -1, 2 }, {
    1, 2 }, {
    2, 1 }, {
    2, -1 }, {
    1, -2 }, {
    -1, -2 }, {
    -2, -1 } };
   int[,] maze = new int[MAX, MAX];
   SqQueue[] SQ = new SqQueue[MAX * MAX];
   static int count,flag=0;
   public Form1(){
   
      InitializeComponent();
   }
   PictureBox[,] MyPicture = new PictureBox[8, 8];
   Label[,] MyLabel = new Label[8, 8];
   SqStack s = new SqStack();
   SqStack s2 = new SqStack();
   static int TempX, TempY;
   private void Form1_Load(object sender, EventArgs e){
   
      InitLabelArray();
      InitPictureBoxArray();
   }
   //输入初始位置 确定
   private void button1_Click
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值