马踏棋盘问题
来源:互联网 发布:大数据专业委员会 编辑:程序博客网 时间:2024/04/30 19:14
1.问题描述
设计一个国际象棋的马踏棋盘的演示程序
2.需求分析
(1)将马随即放在国际象棋的8×8棋盘BChess[8][8]的某个方格中,马按走棋规则进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格。
(2)求出马的行走路线,并按求出的行走路线,将数字1,2,……,64依次填入一个8×8的方阵,输出之。
#include <iostream>#include <time.h>#include <iomanip>using namespace std;#define X 8#define Y 8int chess[X][Y];//找到基于(x,y)下一个可走的位置int nextxy(int *x,int *y, int count){switch(count){case 0:if (*x+2<=X-1&&*y-1>=0&&chess[*x+2][*y-1]==0){*x+=2;*y-=1;return 1;}break;case 1:if (*x+2<=X-1&&*y+1<=Y-1&&chess[*x+2][*y+1]==0){*x+=2;*y+=1;return 1;}break;case 2:if (*x+1<=X-1&&*y-2>=0&&chess[*x+1][*y-2]==0){*x+=1;*y-=2;return 1;}break;case 3:if (*x+1<=X-1&&*y+2<=Y-1&&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<=Y-1&&chess[*x-2][*y+1]==0){*x-=2;*y+=1;return 1;}break;case 6:if (*x-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<=Y-1&&chess[*x-1][*y+2]==0){*x-=1;*y+=2;return 1;}break;default:break;}return 0;}void print(){int i,j;for (i=0;i<X;i++){for (j=0;j<Y;j++){cout<<setw(4)<<chess[i][j];}cout<<endl;}cout<<endl;}//深度优先遍历//(x,y)为位置坐标//tag为标记变量,每走一步tag加1int TravelVhessBoard(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;}//找到马的下一个可走的坐标(x1,y1),如果找到flag=1,否则为0flag=nextxy(&x1,&y1,count);while (0==flag&&count<7){count++;flag=nextxy(&x1,&y1,count);}while (flag){if (TravelVhessBoard(x1,y1,tag+1)){return 1;}x1=x;y1=y;count++;flag=nextxy(&x1,&y1,count);while (0==flag&&count<7){count++;flag=nextxy(&x1,&y1,count);}}if (0==flag){chess[x][y]=0;} return 0;}int main(){int i,j;clock_t start,finish;start=clock();for (i=0;i<X;i++) {for (j=0;j<Y;j++){chess[i][j]=0;}}if (!TravelVhessBoard(2,0,1)){cout<<"Failure!"<<endl;} print();finish=clock();cout<<"Time= "<<double(finish-start)/CLOCKS_PER_SEC<<endl;return 0;}
0 0
- 马踏棋盘问题
- 马踏棋盘问题
- 马踏棋盘问题
- 马踏棋盘问题
- 马踏棋盘问题
- 马踏棋盘问题
- 马踏棋盘问题
- 马踏棋盘问题
- 马(糟)踏棋盘问题
- 【数据结构】马踏棋盘问题
- 马踏棋盘算法(骑士周游问题)
- 【数据结构】马踏棋盘的遍历问题
- java实现马踏棋盘问题
- 马踏棋盘算法(骑士周游问题)
- 马踏棋盘算法(骑士周游问题)
- 马踏棋盘算法(骑士周游问题)
- 马走棋盘问题
- 骑士周游问题(马踏棋盘问题)DFS
- 《代码大全》学习摘要(四)伪代码编程过程
- Socket的正确关闭(改良版)
- codechef Factorial 算法 fread读入数据
- HDU 2895 字符串处理(看懂就简单)
- 如何通过Html网页调用本地安卓app
- 马踏棋盘问题
- OK6410开发板ARM基本介绍(一)S3C6410的地址映射
- 克鲁斯卡尔(Kruskal)算法求最小生成树
- git从远程库拷贝代码到本地
- 基于Mahout的电影推荐系统(MVC架构)
- 我的IT生涯
- 摄像头程序详解
- Android的StrictMode(严苛模式)
- VBoxLinuxAdditions.run 不能执行