【5003】马遍历问题
来源:互联网 发布:淘宝co2oc运动假货 编辑:程序博客网 时间:2024/05/08 18:36
Time Limit: 10 second
Memory Limit: 2 MB
问题描述
中国象棋棋盘如图所示。马自左下角(0,0)往右上角(8,9)跳。今规定只许往右跳,不许往左跳。
求出所有可行的跳行路线。比如图中所示为第一种跳行路线,并将所经路线按如下格式输出:
1:(0,0)->(1,2)->(2,4)->(3,6)->(4,8)->(6,9)->(7,7)->(8,9)
Input
无输入文件
Output
输出所有可行的行走路线
格式为:1{序号}:(0,0)->(1,2)->(2,4)->(3,6)->(4,8)->(6,9)->(7,7)->(8,9){方案}
输出方案中,输出优先顺序为(i+1,j+2)>(i+2,j+1)>(i+2,j-1)>(i+1,j-2)。其中(i,j)代表马当前位置,i是横坐标,j是纵坐标。
Sample Input
Sample Output
1:(0,0)->(1,2)->(2,4)->(3,6)->(4,8)->(6,9)->(7,7)->(8,9)2:(0,0)->(1,2)->(2,4)->(3,6)->(4,8)->(5,6)->(6,8)->(8,9)3:......4:......5:............
【题解】
从0,0开始按照题目的顺序搜索就可以了,深搜。最后打印方案。
【代码】
#include <cstdio>const int MAXP = 10;bool can[MAXP][MAXP];int step = 0,ans[1000][3],nans = 0;void init() //初始化数组,一开始所有的位置都可以走。can{ for (int i = 0;i <= 8;i++) for (int j = 0;j <= 9;j++) can[i][j] = true;}void tr_y(int x,int y) //尝试到(x,y)这个位置{ if (x > 8) return; if (y > 9) return; if (y < 0) return; if (!can[x][y]) return; //这之前都用于判断x,y这个位置能否到达. can[x][y] = false; //置这个位置不能再走。 step++;//步骤数增加 ans[step][1] = x;//记录下答案。 ans[step][2] = y; tr_y(x+1,y+2); //按照题目给的顺序去搜索。 tr_y(x+2,y+1); tr_y(x+2,y-1); tr_y(x+1,y-2); if (x == 8 && y == 9) //如果到了终点 就输出方案。 { nans++; printf("%d:",nans); for (int i = 1;i <= step-1;i++) printf("(%d,%d)->",ans[i][1],ans[i][2]); printf("(%d,%d)\n",ans[step][1],ans[step][2]); } can[x][y] = true; //回溯到之前的状态 step--;}int main(){ init(); tr_y(0,0); return 0;}
0 0
- 【5003】马遍历问题
- 马的遍历问题
- 马的遍历问题
- 马的遍历问题
- 马的遍历问题
- 马的遍历问题
- 马的遍历问题
- 中国象棋马的遍历问题
- 马的遍历问题-问题分析
- 遍历问题
- 遍历问题
- 遍历问题
- 递归算法之马遍历棋盘问题
- 【数据结构】马踏棋盘的遍历问题
- 【经典算法问题】马的遍历【回溯】
- 遍历矩阵格问题
- 二叉树遍历问题
- RMS遍历问题
- Android的EditText获取输入字符串所占屏幕宽度
- 在WebService中使用Retrofit+RxJava
- poj1042
- JQuery.cookie() 方法的使用(读取、写入、删除)
- OpenCV—画出时钟并动态同步系统时间
- 【5003】马遍历问题
- 产品设计-产品交互-人性化-是不是好用
- Linux Huge Page 大页
- Linux搭建zookeeper
- mpchart的属性集合
- 设计模式---迪米特法则
- Android自定义工具栏(一)——从ActionBar说起
- js模拟map实现原理终极版
- (javascript)浅析js函数表达式和函数声明以及闭包