中国象棋,马不重复的走完每一格
2016-01-22 10:56
337 查看
马从左上角开始走,数字代表第几步,90步刚好走完全场
源码如下(运行时间比较长)
源码如下(运行时间比较长)
//功能:在棋盘上用马不重复的走完每一格(可能会花好一段时间) //时间 2015-4-23 #include <stdio.h> #include <time.h> #define X 10 #define Y 9 int chess[X][Y]={0}; int nextxy(int *x, int *y, int count) { switch(count) { case 0: if( *x+2<X && *y-1>=0 && chess[*x+2][*y-1]==0) { *x+=2; *y-=1; return 1; } break; case 1: if( *x+2<X && *y+1<Y && chess[*x+2][*y+1]==0) { *x+=2; *y+=1; return 1; } break; //往下边移动 case 2: if( *x-2>=0 && *y-1>=0 && chess[*x-2][*y-1]==0) { *x-=2; *y-=1; return 1; } break; case 3: if( *x-2>=0 && *y+1<Y && chess[*x-2][*y+1]==0) { *x-=2; *y+=1; return 1; } break; //往上边移动 case 4: if( *x+1<X && *y-2>=0 && chess[*x+1][*y-2]==0) { *x+=1; *y-=2; return 1; } break; case 5: if( *x-1>=0 && *y-2>=0 && chess[*x-1][*y-2]==0) { *x-=1; *y-=2; return 1; } break; //往左边移动 case 6: if( *x+1<X && *y+2<Y && chess[*x+1][*y+2]==0) { *x+=1; *y+=2; return 1; } break; case 7: if( *x-1>=0 && *y+2<Y && chess[*x-1][*y+2]==0) { *x-=1; *y+=2; return 1; } break; //往右边移动 default: break; } return 0; } void printline() { int i,j; printf("\n不重复走完每一格路径如下:\n"); for(i=0;i<X;i++) { for(j=0;j<Y;j++) printf("%2d\t",chess[i][j]); printf("\n"); } printf("\n"); } //深度优先遍历,(x,y)为起点坐标,tag为序号 int travelCHESSboard(int x, int y, int tag) { int x1=x, y1=y, flag=0, count=0; chess[x][y]=tag; if( X*Y==tag ) { printline(); //如果tag=X*Y,表示已经走完每一格 return 1; } flag=nextxy(&x1, &y1, count); while(0==flag && count<8) { count++; flag=nextxy(&x1, &y1, count); } //如果能找到空余的下一跳,flag=1 while(flag) { if(travelCHESSboard(x1,y1,tag+1)) { return 1; } x1=x; y1=y; count++; flag=nextxy(&x1, &y1, count); while(0==flag && count<8) { count++; flag=nextxy(&x1, &y1, count); } } if(0==flag) chess[x][y]=0; return 0; } int main() { int a=1,b=1; clock_t start,finish; start=clock(); //chess[X][Y]={0}; printf("请输入起始位置的横纵坐标,坐标值从1开始。以空格隔开,回车结束:\n"); //scanf("%d %d",&a,&b); if(!travelCHESSboard(a-1,b-1,1)) { printf("着实找不到路径,you can you up! \n"); } finish=clock(); printf("\n共耗时%f秒\n",(double)(finish-start)/CLOCKS_PER_SEC); return 0; }
相关文章推荐
- POJ2533 Longest ordered subsequence
- 曾经的中国互联网:多少巨头销声匿迹
- STM8的IAP在线升级
- 负载均衡之Nginx的安装
- HACK的写法
- 基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
- Oracle与MySQL数据库大型对象类型(TinyBlob Blob Mediumblob LongBlob / BLOB CLOB NCLOB BFILE )的区别
- SA: 情感分析资源(Corpus、Dictionary)
- Storm学习第一天
- 在命令行获取标准输入序列的反互序列,pep序列和长度信息
- 2015年值得关注的8款跨平台开发工具(界面类)
- 转:探讨跨域请求资源的几种方式
- 第一篇 理论 1.7 精进-正念-正知,如理作意和觉察力 - 阿姜念·身念处禅观修法
- 测试专用,别乱点击进来
- 定制 LAMP 网站服务平台
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- 浅析Java中的final关键字
- 深度学习与计算机视觉系列(10)_细说卷积神经网络
- 关于Ionic run android 的Error executing "adb devices": error解决办法
- 负载均衡之Nginx+tomcat+redis实现session共享的负载均衡