⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 象棋马步计算程序.txt

📁 c语言的一些常见的算法以及思考和改进的文章,写的很不错,花费了很大的精力从网络了搜罗的,希望大家喜欢.
💻 TXT
字号:
象棋游戏中“马步”计算之C语言代码[原创] 
       在象棋游戏中,马走"日",象飞"田",下面的代码可以计算"马"从一个位置到达另一个位置所需要的"步数"。

算法:

1)当s=1并且t=0时,d=3

2)当s=2并且t=2时,d=4

3)当s和t为其他值时,d=max[up(s/2),up((s+t)/3)]+{(s+t)-max[up(s/2),up((s+t)/3)]}%2

其中s=max[abs(xp-xr),abs(yp-yr)],t=max[abs(xp-xr),abs(yp-yr)],p表示起点位置,r表示目标位置,up为上取整函数

代码比较简单,就不写注释了:

#define M 8
#define N 8
int max(int a,int b)
{
   if(a>b)
      return a;
   return b;
}

int min(int a,int b)
{
   if(a<b)
      return a;
   return b;
}

int up(double a)
{
  if((int)((int)a/a)==1)
     return (int)a;
  return (int)(a+1);
}

int distance(int s,int t)
{
   if(s==1&&t==0)
      return 3;
   else if(s==2&&t==2)
      return 4;
   else
   {
     int a=up(s*1.0/2);
     int b=up((s+t)*1.0/3);
     return max(a,b)+(s+t-max(a,b))%2;
   }
}

void init(int a[M][N])
{
   int i,j;
   for(i=0;i<M;i++)
      for(j=0;j<N;j++)
          a[i][j]=-1;
}

void output(int a[M][N])
{
  int i,j;
  for(i=0;i<M;i++)
  {
     printf("\n");
     for(j=0;j<N;j++)
          printf("%3d",a[i][j]);
  }
}

void main()
{
   int array[M][N];
   int row,col;
   int i,j;
   int s,t;
   init(array);
   printf("\nPlease select a point to start:\n");
   scanf("%d %d",&row,&col);
   printf("\nOK.Please wait.....");
   for(i=0;i<M;i++)
   {
      for(j=0;j<N;j++)
      {
          if(i==row&&j==col)
                 continue;
          s=max(abs(i-row),abs(j-col));
          t=min(abs(i-row),abs(j-col));
          array[i][j]=distance(s,t);
      }
   }
   array[row][col]=0;
   printf("\nOK.FINISH.\N");
   output(array);
}

运行效果:

Please select a point to start:
3 4

OK.Please wait.....
OK.FINISH.
  3  2  3  2  3  2  3  2
  2  3  4  1  2  1  4  3
  3  2  1  2  3  2  1  2
  2  3  2  3  0  3  2  3
  3  2  1  2  3  2  1  2
  2  3  4  1  2  1  4  3
  3  2  3  2  3  2  3  2
  4  3  2  3  2  3  2  3

Please select a point to start:
0 0

OK.Please wait.....
OK.FINISH.
  0  3  2  3  2  3  4  5
  3  2  1  2  3  4  3  4
  2  1  4  3  2  3  4  5
  3  2  3  2  3  4  3  4
  2  3  2  3  4  3  4  5
  3  4  3  4  3  4  5  4
  4  3  4  3  4  5  4  5
  5  4  5  4  5  4  5  6
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -