象棋中马的走法象棋中马的走法
实验三、国际象棋中马的走法
利用C语言,解决象棋中马走向问题的程序。可以自定义一个n*n的棋盘,给出马在棋盘的初始位置,紧接着进行搜索路径,按照有最少出口数的出口进行,一直将所有的位置搜索到,如果结束,则从第二步开始重新寻找搜索路径开始搜索,知道棋盘上所有的位置都遍历到。
解答参考:
程序代码:
#include
#define N 100
int n;
int deltai[]={2,1,-1,-2,-2,-1, 1, 2};
int deltaj[]={1,2, 2, 1, -...
象棋中马的走法
实验三、国际象棋中马的走法
利用C语言,解决象棋中马走向问题的程序。可以自定义一个n*n的棋盘,给出马在棋盘的初始位置,紧接着进行搜索路径,按照有最少出口数的出口进行,一直将所有的位置搜索到,如果结束,则从第二步开始重新寻找搜索路径开始搜索,知道棋盘上所有的位置都遍历到。
解答参考:
程序代码:
#include
#define N 100
int n;
int deltai[]={2,1,-1,-2,-2,-1, 1, 2};
int deltaj[]={1,2, 2, 1, -1,-2,-2,-1};
int board[N][N];
int exitn(int i,int j,int s,int a[]) /*求(i,j)的出口数,s是顺序选择马的可走方法的开始序号*/
1
{
int i1,j1,k,count;
for (count=k=0;k{
i1=i+deltai[(s+k)%8];
j1=j+deltaj[(s+k)%8];
if(i1>=0 && i1=0 && j1}
return count;
}
int next(int i,int j,int s) /*选择下一出口*/
{
int m, k,kk,min;
int a[N],b[N],temp;
m=exitn(i,j,s,a); /*确定(i.j)的出口个数*/
if(m==0) return -1; /*没有出口*/
for(min=9,k=0;k{
temp=exitn(i+deltai[a[k]],j+deltaj[a[k]],s,b);
if(tempmin=temp;
kk=a[k];
}
}
return kk; /*返回选中的马的可走方法*/} int show(int i,int j)
2
{ int m;
for(i=0;i{
for(m=0;mprintf(“|——”);
printf(“|\n”);
for(j=0;jprintf(“|%3d “,board[i][j]);
printf(“|\n”);
}
for(m=0;mprintf(“|——”);
printf(“|\n”);
}
void main()
{
int i,j,step,no,start=0;/*从0号马的可走方法开始顺序检查
*/ printf(“请输入棋盘的大小:\n”);
scanf(“%d”,&n);
printf(“请输入马的初始位置:\n”);
scanf(“%d%d”,&i,&j);
board[i][j]=1;
getchar();
printf(“马走第1步!\n”);
show(i,j);
do
3
{
for(step=2;step{
if((no=next(i,j,start))==-1)
break;
i+=deltai[no]; /*前进一步*/
j+=deltaj[no];
board[i][j]=step;
getchar();
printf(“马走第%d步!\n”,step);
show(i,j);
}
if(step>n*n) break;
start++;
} while(step
4
本文档为【象棋中马的走法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。