马踏棋盘算法——递归实现(回溯法、深度优先遍历)

背景:在学习数据结构时,关于图的遍历的一个经典问题,这里采用递归的方式实现该算法,其中包含回溯法和图的深度优先遍历的思想,在参考各种递归实现该算法的基础上,完成了一版带有自己理解的详细注释版代码

开发环境:Code::Blocks

编译器:GCC

语言:C

代码:(详细注释)

/* 递归+回溯+图深度优先遍历 */
#include 
#include 

#define X 8
#define Y 8

int chess[X][Y];

/* 判断八个方向是否有可以走的点 */
int nextxy_1(int *x,int *y,int count)
{
    /* count表示8个方向 */
	switch(count)
	{
    case 0:
      /* 该方向没有超出边界 且 之前未走过 */
      if(*x+2=0 && chess[*x+2][*y-1]==0)
      {
        *x+=2;
        *y-=1;
        return 1;
      }
      break;

    case 2:
      if(*x+1=0 && chess[*x+1][*y-2]==0)
      {
        *x+=1;
        *y-=2;
        return 1;
      }
      break;

    case 3:
      if(*x-1>=0 && *y-2>=0 && chess[*x-1][*y-2]==0)
      {
        *x-=1;
        *y-=2;
        return 1;
      }
      break;

    case 4:
      if(*x-2>=0 && *y-1>=0 && chess[*x-2][*y-1]==0)
      {
        *x-=2;
        *y-=1;
        return 1;
      }
      break;

    case 5:
      if(*x-2>=0 && *y+1=0 && *y+2=0 && chess[*x+2][*y-1]==0)
      {
        *x+=2;
        *y-=1;
        return 1;
      }
      break;

    case 1:
      if(*x+2=0 && chess[*x+1][*y-2]==0)
      {
        *x+=1;
        *y-=2;
        return 1;
      }
      break;

    case 3:
      if(*x+1=0 && *y-1>=0 && chess[*x-2][*y-1]==0)
      {
        *x-=2;
        *y-=1;
        return 1;
      }
      break;

    case 5:
      if(*x-2>=0 && *y+1=0 && *y-2>=0 && chess[*x-1][*y-2]==0)
      {
        *x-=1;
        *y-=2;
        return 1;
      }
      break;

    case 7:
      if(*x-1>=0 && *y+2

 

——cloud over sky

 ——2020/3/11
 
 

你可能感兴趣的:(数据机构,算法)