当前位置: 首页 > news >正文

数据结构--5.2马踏棋盘算法(骑士周游问题)

题目渊源:

        马踏棋盘问题(又称骑士周游问题或骑士漫游问题)是算法设计的经典问题之一。

题目要求:

        国际象棋的棋盘为8*8的方格棋盘,现将“马”放在任意指定的方格中,按照“马”走棋的规则将“马”进行移动。要求每个方格只能进入一次,最终使得“马”走遍棋盘64个方格。

        

#include <stdio.h>
#include <time.h>#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){*y+=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=*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;
} void print()
{int i,j;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,count =0,flag =0;chess[x][y] = tag;if(x*Y == tag){//打印棋盘print();return 1; }//找到马的下一个可走的坐标(x1,y1)flag = nextxy(&x1,&y1,count);while(0==flag && count<7){count++;}while(flag){if(TravelChessBoard(x1,y1,tag+1)){return 1;}//出现意外,找到马的下一步可走坐标(x1,y1) 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(TravelChessBoard(2,0,1)){printf("抱歉,马踏棋盘失败!\n");}finish = clock();printf("\n本次计算一共耗时:%f秒\n\n",(double)(finish - start)/CLOCKS_PER_SEC);return 0;
}

http://www.lryc.cn/news/150120.html

相关文章:

  • 如何使用CSS实现一个响应式图片幻灯片(Responsive Image Slider)效果?
  • Linux学习之lvm删除
  • bazel介绍以及其发展历史
  • 固定资产管理分析怎么写?
  • 【项目源码】一套基于springboot+Uniapp框架开发的智慧医院3D人体导诊系统源码
  • 可能的二分法 -- 二分图判定【DFS、BFS分别实现】
  • 六级翻译备考
  • Vue框架--Vue中的数据绑定
  • Unity——热更新浅析
  • IMPLEMENT_DYNCREATE的分析
  • Java实现根据短连接获取1688商品详情数据,1688淘口令接口,1688API接口封装方法
  • ABAP FICO 凭证替代 凭证校验
  • 项目验收有哪些流程?
  • C++,类的继承
  • 作业33333333
  • Spring Cloud--从零开始搭建微服务基础环境【二】
  • 算法工程题(中序遍历)
  • jsch网页版ssh
  • 教程i.MX8MPlus开发板SPI转CAN操作
  • Docker中容器的随机命名方式
  • 大数据Flink实时计算技术
  • 数学中的自由与我们的生活
  • 8 python的迭代器和生成器
  • Git的基本使用笔记——狂神说
  • 【小程序】外部二维码扫码打开微信小程序并跳转到指定页面
  • bazel安装
  • Typescript的class语法[类]的操作和应用
  • OPENCV实现暴力特征匹配
  • 揭秘亚马逊Amazon测评,掌握细节和技巧,提升产品销量和评论数量
  • Linux线程互斥