找传奇、传世资源到传世资源站!

C语言马踏棋盘

8.5玩家评分(1人评分)
下载后可评
介绍 评论 失效链接反馈

#include <stdio.h>#define X 8#define Y 8int chess[X][Y];int nextxy(int *x, int *y, int count) /*找到基于x,y位置的下一个可走的位置*/{ switch(count) { case 0: if(*x 2<=X-1 && *y-1>=0 && chess[*x 2][*y-1]==0) { *x=*x 2; *y=*y-1; return 1; } break; case 1: if(*x 2<=X-1 && *y 1<=Y-1 && chess[*x 2][*y 1]==0) { *x=*x 2; *y=*y 1; return 1; } break; case 2: if(*x 1<=X-1 && *y-2>=0 && chess[*x 1][*y-2]==0) { *x=*x 1; *y=*y-2; return 1; } break; case 3: if(*x 1<=X-1 && *y 2<=Y-1 && chess[*x 1][*y 2]==0) { *x=*x 1; *y=*y 2; return 1; } break; case 4: if(*x-2>=0 && *y-1>=0 && chess[*x-2][*y-1]==0) { *x=*x-2; *y=*y-1; return 1; } break; case 5: if(*x-2>=0 && *y 1<=Y-1 && chess[*x-2][*y 1]==0) { *x=*x-2; *y=*y 1; return 1; } break; case 6: if(*x-1>=0 && *y-2>=0 && chess[*x-1][*y-2]==0) { *x=*x-1; *y=*y-2; return 1; } break; case 7: if(*x-1>=0 && *y 2<=Y-1 && chess[*x-1][*y 2]==0) { *x=*x-1; *y=*y 2; return 1; } break; default: break; } return 0;}int TravelChessBoard(int x, int y, int tag) /*深度优先搜索地"马踏棋盘"*/{ int x1=x, y1=y, flag=0, count=0; chess[x][y]=tag; if(tag == X*Y) { return 1; } flag=nextxy(&x1, &y1, count); while(flag==0 && count<7) { count=count 1; flag=nextxy(&x1, &y1, count); } while(flag) { if(TravelChessBoard(x1, y1, tag 1)) return 1; x1=x; y1=y; count=count 1; flag=nextxy(&x1, &y1, count); /*寻找下一个(x,y)*/ while(flag==0 && count<7) { /*循环地寻找下一个(x,y)*/ count=count 1; flag=nextxy(&x1, &y1, count); } } if(flag == 0) chess[x][y]=0; return 0;}int main(){ int i, j; for(i=0; i<X; i ) for(j=0; j<Y; j ) chess[i][j]=0; if(TravelChessBoard(2, 0, 1)) { for(i=0; i<X; i ) { for(j=0; j<Y; j ) printf("%-5d", chess[i][j]); printf("\n"); } printf("The horse has travelled the chess borad\n"); } else printf("The horse cannot travel the chess board\n"); return 0;}

评论

发表评论必须先登陆, 您可以 登陆 或者 注册新账号 !


在线咨询: 问题反馈
客服QQ:174666394

有问题请留言,看到后及时答复