今天终于完成“骑士征程”编程题,感觉很难,需要考虑的变化比较多。
当前坐标,下一个坐标等等,最难搞的就是方向的确定。算法也有多种选择,不过凭我的大脑只能想到两种比较简单的,而且第二种还是在第一种的基础上实现的,呵呵。(感觉这就像有人问我会做几样菜,我答:会两种,第一,蛋炒饭;第二,饭炒蛋。)
测试时,出现了一个比较严重的bug,属于逻辑上的问题,可能是刚开始没想好,查了好久才搞出来。就是在判断骑士和棋盘界限时,把当前骑士坐标和骑士的下个坐标点搞混了,结果骑士跳不到棋盘最里面的行列。
虽最终实现了题目的基本要求,但还有个问题:骑士跳到三四步时就卡了,问题是走到死胡同里了,没有地方可以继续跳了。
解决办法:用nexti[l],nextj[l](0<=l<=7)记录下一步骑士的方位,置exits[l]为格(nexti[l],nextj[l])的出路,对于检查每一格(nexti[l] + imove[i],nextj[l] + jmove[j])的出路,取出路最少的格,将之赋值给min,最小不止一个,则将第一个赋给min。这个办法不一定会让骑士走完所有的棋盘格子,但至少会大大的提高能走得步数。
我未用解决办法前的代码如下(写的不好,莫笑~呵呵):
#include <stdio.h>
#include <time.h>
#define ROWS 8
#define COLS 8
int board[ROWS][COLS]; /*定义棋盘为8×8*/
int imove[8], jmove[8]; /*移动的方位,其中0~7各有其值*/
int ikt,jkt; /*骑士的当前坐标,骑士