为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

[精品]西洋棋中骑士的走法与象棋的马类似

2017-12-03 5页 doc 18KB 16阅读

用户头像

is_219945

暂无简介

举报
[精品]西洋棋中骑士的走法与象棋的马类似[精品]西洋棋中骑士的走法与象棋的马类似 西洋棋中骑士的走法与象棋的马类似,只能横向二格,纵向一格或者横向一格,纵向两格(但是西洋棋棋子必须放在格子中),第1步有2种走法,第二步就有5种走法.今有5*5的棋盘,并将骑士的第一步放于左上角(0,0)的位置,试找出一个路径,使骑士在25步内把剩下的24个位置全部走完.输出结果时,将骑士的路径显示于的5*5的方格中,每一方格内显示出走到此方格内为第同步的数字. 请写出全部过程,不甚感谢~ 到处都有,给你一个,省的你找了 1 回溯法(栈回溯) #include"stdio.h...
[精品]西洋棋中骑士的走法与象棋的马类似
[精品]西洋棋中骑士的走法与象棋的马类似 西洋棋中骑士的走法与象棋的马类似,只能横向二格,纵向一格或者横向一格,纵向两格(但是西洋棋棋子必须放在格子中),第1步有2种走法,第二步就有5种走法.今有5*5的棋盘,并将骑士的第一步放于左上角(0,0)的位置,试找出一个路径,使骑士在25步内把剩下的24个位置全部走完.输出结果时,将骑士的路径显示于的5*5的方格中,每一方格内显示出走到此方格内为第同步的数字. 请写出全部过程,不甚感谢~ 到处都有,给你一个,省的你找了 1 回溯法(栈回溯) #include"stdio.h" int Directions[8][2]={ {2,1},{-2,1}, {1,2},{-1,2}, {2,-1},{-2,-1}, {1,-2},{-1-2} }; int a[100],b[100],chess[5][4];/*a[100],b[100]用来记录每次跳到的X,Y,chess[5][4]代表棋盘*/ main() { int dep=1,i=0,j=0,t=0,q=1,g,s,n[100];/*dep代表跳的步数,n[100]用来记录前一次跳的方向*/ for (g=0;g<=4;g++) for(s=0;s<=3;s++) chess[g][s]=0; chess[0][0]=1;/*从(0,0)处跳*/ while(1) { while(t<=7)/*共0~7个方向,轮流试*/ { a[q]=i; b[q]=j; i=i+Directions[t][0]; j=j+Directions[t][1]; if(j>=0 &&j<=3 &&i>=0&&i<=4&&chess[i][j]==0)/*判断所跳之处是否合法*/ {q++;n[q]=t;t=0;dep++;chess[i][j] =dep; if(dep==20) goto lable;/*一旦所跳之处合法,且全局走满则可打印结果了*/ } else {t++; i=a[q];j=b[q];}/*一种方向不行,换个方向再试*/ } chess[i][j]=0;t=n[q]+1;i=a[--q];j=b[q];dep--;}/*8种方向都试完仍不行,则回溯*/ lable: for(g=0;g<=4;g++) { for(s=0;s<=3;s++) printf("%4d",chess[g][s]); printf("\n"); } } -------------------------------------------------------------------- 2 递归法 #include #define MAX_XY 6 #define true 1 #define false 0 static int anDirections[8][2]={ {2,1},{1,2}, {-1,-2},{-2,-1}, {1,-2},{-2,1}, {-1,2},{2,-1} }; typedef int status; typedef struct { int nStep; // Which step this square is int nDirection; // the 8 posibilities of direction }TSquare; TSquare Board[MAX_XY][MAX_XY]; void RecurseFind( int startX, int startY ); void RecurseFindExecute( int x, int y, int step, status &bOK ); int argc, char * argv[] ) void main( { int x,y; printf("Input X:"); scanf("%d",&x); printf("Input Y:"); scanf("%d",&y); RecurseFind( x, y ); } void RecurseFind( int startX, int startY ) { status bOK = false; int x,y; for(x=0;xMAX_XY*MAX_XY) { bOK = true; return; } int newX, newY; for(int i=0;i<8;i++) { newX = x + anDirections[i][0]; newY = y + anDirections[i][1]; if((newX>=0)&&(newX=0)&&(newY
/
本文档为【[精品]西洋棋中骑士的走法与象棋的马类似】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索