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;
}

转载于:https://www.cnblogs.com/AWCXV/p/7632485.html

【5003】马遍历问题相关推荐

  1. GUI设计之马的遍历

    @[TOC]GUI设计之马的遍历(5*5) 象棋中马遍历棋盘 [问题描述] 在N*N棋盘上,任意一个位置放置一个棋子马,要能选择一套合适的移动路线,按象棋中"马走日"的移动规则不重 ...

  2. 马踏棋盘的问题——贪心算法

    [贪心算法] 其实马踏棋盘的问题很早就有人提出,且早在1823年,J.C.Warnsdorff就提出了一个有名的算法. 在每个结点对其子结点进行选取时,优先选择 '出口'最小的进行搜索,'出口'的意思 ...

  3. 马踏中国象棋棋盘的贪心算法

    今天上午在网上看到了一篇介绍马踏棋盘的贪心算法的文章,就想照着把它实现.可是写到一半,发现原文好像是国际象棋的棋盘.对国际象棋的规则一窍不通,所以就硬着头皮按中国象棋的规则来写.还真的写出来了. [问 ...

  4. shiro 内存马_Tomcat 内存马检测

    随着HW.攻防对抗的强度越来越高,各大厂商对于webshell的检测技术愈发成熟,对于攻击方来说,传统的文件落地webshell的生存空间越来越小,无文件webshell已经逐步成为新的研究趋势. 三 ...

  5. Java-Collection、List

    1.Collection 1.1集合基础知识 集合类的特点:提供一种存储空间可变的存储类型,存储的数据容量随时可以发生改变 1.2集合类体系结构 1.3 Collection 集合概述和使用 Coll ...

  6. 数独的生成和破解算法分析

    最近在捉摸数独的破解方法,自己本不是搞软件的,而是电子的.所以虽然写出来了一个,但是方法很笨拙. 在网上查好时,发现了有一种算法的思维与众不同,既简单又高效,不像其他算法一样递归的太深. 我对作者的代 ...

  7. 用栈解决骑士周游问题

    棋盘为6*6棋盘,马走日字,在马遍历棋盘后能回到起点,这就是一个汉密尔顿回路问题 , 这是之前我们老师给我们布置的一个作业, 以下是我的代码,没有用到递归 #include <iostream& ...

  8. 【洛谷】马的遍历--广度优先搜索(BFS)

    题目描述 传送门:https://www.luogu.com.cn/problem/P1443 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意 ...

  9. 广度优先搜索(BFS)——马的遍历(洛谷 P1443)

    来看一道经典的搜索问题--马的遍历 大致题目,给定棋盘规模,以及马的初始位置,输出马到棋盘的最短距离,若不能到达则输出-1 很简单的一个搜索问题,用经典算法BFS就可以了,唯一需要注意判断的就是马有8 ...

  10. 【日常水题-bfs】马的遍历

    这几天日常一搜索qaq P1443 马的遍历 1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 ...

最新文章

  1. junit集成Hamcrest测试集合中某个属性是否包含特定值
  2. BroadcastReceiver 启动activity(在activity之外启动一个activity)
  3. 宠物龟 扫地机器人_有宠物家庭必选 岚豹扫地机器人太实用了
  4. Servlet 异常处理
  5. php cli模式下获取参数的方法
  6. 浙江省第6届程序设计竞赛结题报告汇总 zoj3202-3212
  7. 1894. 找到需要补充粉笔的学生编号
  8. selenium.common.exceptions.WebDriverException: Message: ‘chromedriver’解决
  9. setTimeout/setInterval伪异步
  10. fetch jsonp连接mysql_后端接口开发:json,jsonp,restful
  11. matlab 矩阵 黑白,各位好 请问怎么用0 1矩阵画出黑白的矩阵如下图所示
  12. 笨笨的Zend - RewriteBase
  13. 英语单词记忆 词源法-思维导图(20)词源st/sist/stat/stin/stem-217
  14. Java写win10激活码_win10系统配置java环境 生成密钥
  15. Mac air装 win10 ,总是提示拷贝windows安装文件失败!?
  16. python 实现的 成语接龙
  17. 什么是业务中台、数据中台、技术中台?这回终于解释清楚了
  18. 成都拓嘉辰丰电商:拼多多客服介入对商家有什么影响
  19. android app定时提醒,安卓手机上有没有每10分钟间隔定时提醒一次的便签app软件?...
  20. vue项目中使用高德地图行政区域聚合功能(script引入方式)

热门文章

  1. 小、巧、快消息队列组件beanstalkd
  2. 使用PADDING-TOP:(PERCENTAGE)实现响应式背景图片
  3. $.type 怎么精确判断对象类型的 --(源码学习2)
  4. hdoj1000解题报告
  5. Nginx怎么打开目录浏览功能
  6. clone ubuntu 启动不能启动网卡
  7. windows下Tomcat安装及Eclipse配置教程
  8. python中的append()有什么功能_关于列表:在Python中,“。append()”和“+ = []”之间有什么区别?...
  9. php框架启动过程,框架启动方式 - CrossPHP 框架文档
  10. redis stream持久化_带你彻底理解 Redis 持久化