马的遍历问题
来源:互联网 发布:淘宝用户画像分析 编辑:程序博客网 时间:2024/04/29 23:35
#include<stdio.h>/*问题描述:在n*m的棋盘上,马只能走日字。马从(x,y)出发,把棋盘的每一个点都走一遍,且只走一次,找出所有路径。*/void find(int x,int y,int dep);int check(int x,int y);void output();int n=5,m=4;int fx[8]={1,2,2,1,-1,-2,-2,-1};int fy[8]={2,1,-1,-2,-2,-1,1,2};int a[5][4];int dep,x,y,count;int main(){int i,j; dep=1;////记录递归深度,即走过的点的个数,当dep=n*m,找到一组解count=0;printf("Please input the original point:\n");scanf("%d%d",&x,&y);if(x<0 || x>4 || y<0 || y>3){printf("wrong data!\n");return 1;}for(i=0;i<n;i++){for(j=0;j<m;j++){a[i][j]=0;}}a[x][y]=1;find(x,y,2);if(count==0){printf("NO solution!\n");}else{printf("Total count=%d\n",count);}return 0;}void find(int x,int y,int dep){int i;int xx,yy;for(i=0;i<8;i++)//加上方向增量,形成新的坐标{xx=x+fx[i];yy=y+fy[i];if(check(xx,yy)==1)//判断坐标是否出界,或者已经走过{a[xx][yy]=dep;//走向新的坐标if(dep==n*m){output();}else{find(xx,yy,dep+1);//从新的坐标出发,递归下一层}a[xx][yy]=0;//回溯,恢复未走标志}}}int check(int x,int y){int flag = 1;if(x<0 || x>4 || y<0 || y>3){flag = 0;}if(a[x][y]!=0){flag=0;}return flag;}void output(){count++;printf("\ncount=%d\n",count);int i,j;for(i=0;i<n;i++){for(j=0;j<m;j++){printf("%4d",a[i][j]);}printf("\n");}}
- 马的遍历问题
- 马的遍历问题
- 马的遍历问题
- 马的遍历问题
- 马的遍历问题
- 马的遍历问题
- 中国象棋马的遍历问题
- 马的遍历问题-问题分析
- 【数据结构】马踏棋盘的遍历问题
- 【经典算法问题】马的遍历【回溯】
- cursor遍历的问题
- 树的遍历问题
- 【5003】马遍历问题
- 关于hashmap的遍历问题
- 关于hashmap的遍历问题
- jsp jstl 遍历的问题
- ArrayList的遍历删除问题
- struts2 iterator遍历的问题
- C++ Web Programming
- Fiddler 教程
- Camera driver 软件设计思想
- AsyncTask使用详细说明
- 解析全球级分布式数据库Google Spanner(http://www.csdn.net/article/2012-09-19/2810132-google-spanner-next-databa)
- 马的遍历问题
- 布尔检索及其查询优化
- 输出一百以内的全部素数
- java基础学习笔记(八) log4j
- 构建开发IOS应用的虚拟机开发环境实践
- format code appears twice 解决方法
- linux下tar gz bz2 tgz z等众多压缩文件的解压方法
- Linux性能监控——CPU、Memory、IO、Network
- “实际用户ID”、“有效用户ID”和“保存的设置用户ID”三个术语的区别