在中国象棋中(国际象棋也有)马是一种很有创造意义的棋子,古人通过日字,让马能够踏遍棋盘的每一个角落。但是在中国象棋棋盘中大小是固定的,如果棋盘大小和形状都是我们自己指定的会怎么样?山东理工这个题很明显的思路就是一步步尝试,如果碰壁就回头的深度优先搜索思想。


#include<iostream>
#include<math.h>
using namespace std;
bool storage[26][26];//首先,先把棋盘安排好
int selects[4] = {-2,-1,1,2};//马走日,要么横1竖2要么横2竖1.,正负号表示运动方向。
char word[] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
int count = 0;
bool over = false;//判断程序是不是已经走完,如果已经找到可以遍历所有棋盘位置的走法,则完成程序后续的搜索没必要进行。over是一个程序搜索完成标志。
void newplace(int a,int b){//重置棋盘记录for(int i= 0;i<a;i++){for(int j = 0;j<b;j++){storage[i][j] = false;}}count = 0;over = false;
}
void putNode(int a,int b,int starta,int startb,string history){//a,b 表示棋盘大小,starta  startb表示刚踏过的位置。history表示马的行动路径(当时在下菜鸟一枚,没有正经的训练过,采用了这种笨方法)storage[starta][startb] = true;count++;history+=word[startb];history+=to_string((starta+1));if(count == a * b){cout<<history<<endl;over = true;return ;} for(int i = 0;i<4;i++){for(int j = 0;j<4;j++){if(abs(selects[i]) == abs(selects[j])){continue;}int tema = starta + selects[j];int temb = startb + selects[i];if(tema>=0&&tema<a&&temb>=0&&temb<b&&storage[tema][temb]==false){string tems(history);putNode(a,b,tema,temb,tems);if(over == true){return;}storage[tema][temb] = false;count--;}} }
}
int main(){int number;cin>>number;for(int i = 0;i<number;i++){int a,b;cin>>a>>b;newplace(a,b);string inf = "";cout<<"Scenario #"<<i+1<<":"<<endl;putNode(a,b,0,0,inf);if(over == false){cout<<"impossible"<<endl;}cout<<endl;}    return 0;
}/***************************************************
User name: HZXY卢斌
Result: Accepted
Take time: 4ms
Take Memory: 196KB
Submit time: 2019-06-03 20:44:23
****************************************************/

A Knight's Journey相关推荐

  1. POJ 2488 A Knight's Journey (棋盘DFS)

    A Knight's Journey   大意: 给出一个国际棋盘的大小,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径. 1 #include <map> 2 #in ...

  2. TOJ 1702.A Knight's Journey

    2015-06-05 问题简述: 有一个 p*q 的棋盘,一个骑士(就是中国象棋里的马)想要走完所有的格子,棋盘横向是 A...Z(其中A开始 p 个),纵向是 1...q. 原题链接:http:// ...

  3. A Knight‘s Journey(POJ-2488)

    A Knight's Journey 题目 题目大意 题目思路 代码 题目 Description Background The knight is getting bored of seeing t ...

  4. POJ 2488 - A Knight‘s Journey + Python

    这是一个深度优先搜索DFS题目. 原题连接:2488 -- A Knight's Journey 参考资料:POJ 2488 - A Knight's Journey | 眈眈探求 参考资料:POJ2 ...

  5. OpenJudge NOI 2.5 1490:A Knight‘s Journey

    [题目链接] OpenJudge NOI 2.5 1490:A Knight's Journey 疑问:题目说可以从任意点出发,以任意点结束.为什么我看他人的代码中,只写从(1,1)出发的情况也能过呢 ...

  6. poj - 2488 A Knight's Journey

    走马步,求能否遍历棋盘上所有格,如能,按最小字典序输出路径. 做这题时我又看了下以前写的poj 2676,把代码又改进了下. 1 #include <stdio.h> 2 #include ...

  7. POJ 2488 A Knight's Journey

    题意:给一个n×m的棋盘,如果一个骑士可以从任意一个位置出发不重复的走遍棋盘的每个格子就输出字典序最短的路径. 解法:dfs.暴搜n×m次,只是被字典序输出坑了--而且字母是列序号数字是行序号--这两 ...

  8. POJ2488 A Knight's Journey(DFS)

    题意: 输入一些棋盘对应的行和列,看骑士(日字)能不能走完整个棋盘,可以从任何地方开始,注意要字典序输出 要点: 虽然说骑士可以从棋盘上任意一点出发,但因为要按字典序(lexicographicall ...

  9. 【poj 2488】A Knight's Journey 中文题意题解代码(C++)

    题目链接: http://poj.org/problem?id=2488 中文题意: 给出一个p行q列的国际棋盘,马可以从任意一个格子开始走,问马能否不重复的走完所有的棋盘.如果可以,输出按字典序排列 ...

最新文章

  1. 怎么用python处理excel文件-用python处理excel文件有多轻松?工作从未如此简单
  2. 干货 | 深入仓储管理系统你需要了解的15件事
  3. mybatis3 添加ehcache支持
  4. IOS UIWindow 和 UIScreen
  5. GridView CSS的样式表
  6. 双目测距数学原理详解(转载)
  7. MySQL_运算符与函数
  8. linux kernel 下的hash 和链表 应用
  9. 云计算,SDN,虚拟化三者关系
  10. css的定位属性——固定定位和粘性定位
  11. 卧槽!全网最全编程学习网站汇总!还不赶快放到收藏夹里吃灰~
  12. macbook卡在进度条开不了机_解决MacBook Pro开机卡死在进度条无反应,进不去桌面...
  13. 天朝皇叔:学习笔记 Qt 连接数据库sql server
  14. c语言stdoux串口流,嵌入式C语言代码优化的一些经验
  15. ROS-机器人操作系统(ROS)浅析----第三章
  16. python离线语音唤醒算法_python实现离线语音识别
  17. SQL Server 如何判断PLE (页面的预期寿命)
  18. OpenCV(4.0.0) Error: Assertion failed (dst.data == (uchar*)dst_ptr) in cvShowImage
  19. 百度索引量与“site”结果是不是一样的,site总是接近百度索引量
  20. 【算法记录】梅式砝码问题

热门文章

  1. 扫描车牌是什么神经网络,卷积神经网络车牌识别
  2. Python学习之:如何根据经纬度来实现地图的可视化(将这些点在地图上标注出来)
  3. OGNL表达式的基本语法和用法
  4. telnet连接上后自动断开_用于确定网络端口连接到办公室端口工具介绍
  5. Spring Web MVC (Spring MVC) 的相关例题及解析
  6. ffmpeg命令分析【详细分析合集】
  7. 秘制牛肉Alpha阶段项目展示
  8. 成龙在北大的演讲:值得每一个中国人看[精品]
  9. 【PTA】7-14 福到了
  10. 利用Python输出九九乘法表