POJ 2488 -- A Knight's Journey(骑士游历)

题意:

给出一个国际棋盘的大小,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径。

经典的“骑士游历”问题

输入:第一行,整数n,接下来是n行,每一行为p和q,p为行数,q为列数,p用1...p编号,q用A...Q编号

马的走法:每步棋先横走或直走一格,然后再往外斜走一格;或者先斜走一格,最后再往外横走或竖走一格(即走"日"字)。可以越子,没有中国象棋中的"蹩马腿"限制。

解题思路:

dfs

  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. int r,c;///行r,列c
  5.  
  6. const int dr[] = {-, ,-, ,-,,-,};
  7. const int dc[] = {-,-,-,-, ,, ,};
  8. bool chess[]['Z'+];
  9.  
  10. struct square{
  11. int row;
  12. char col;
  13. };
  14.  
  15. bool inside(int x,int y)
  16. {
  17. return x>= && x<=r && y>='A' && y<='A'+c-;
  18. }
  19.  
  20. bool dfs(square *way,int i,int j,int step)
  21. {
  22. chess[i][j]=true;
  23. way[step].row=i;
  24. way[step].col=j;
  25. if(step==r*c)
  26. return true;
  27.  
  28. for(int k=;k<;k++) //骑士从当前位置尝试跳到其他位置
  29. {
  30. int ii,jj;
  31. ii = i+dr[k];jj = j+dc[k];
  32. if(!chess[ii][jj] && inside(ii,jj))
  33. if(dfs(way,ii,jj,step+))
  34. return true;
  35. }
  36.  
  37. chess[i][j]=false; //能执行到这步,说明前面跳的8步都不符合要求
  38. return false; //即当前位置是错误位置,擦除记录返回上一步
  39. }
  40.  
  41. int main()
  42. {
  43. int n;
  44. cin>>n;
  45. for(int i=;i<=n;i++)
  46. {
  47. cin>>r>>c;
  48. bool flag = false;
  49. memset(chess,false,sizeof(chess));
  50. square *way = new square[r*c+];
  51. for(int i='A';i<='A'+c-;i++)
  52. {
  53. for(int j=;j<=r;j++)
  54. {
  55. flag = dfs(way,j,i,);
  56. if(flag)
  57. break;
  58. }
  59. if(flag)
  60. break;
  61. }
  62.  
  63. ///打印解
  64. cout<<"Scenario #"<<i<<":"<<endl;
  65. if(flag)
  66. {
  67. for(int k=;k<=r*c;k++)
  68. cout<<way[k].col<<way[k].row;
  69. cout<<endl<<endl;
  70. }else{
  71. cout<<"impossible"<<endl<<endl;
  72. }
  73.  
  74. }
  75. return ;
  76. }

 

POJ 2488 -- A Knight's Journey(骑士游历)的更多相关文章

  1. POJ 2488 A Knight's Journey(深搜+回溯)

    A Knight's Journey Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) ...

  2. POJ 2488 A Knight's Journey(DFS)

    A Knight's Journey Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 34633Accepted: 11815 De ...

  3. poj 2488 A Knight's Journey 【骑士周游 dfs + 记忆路径】

    题目地址:http://poj.org/problem?id=2488 Sample Input 3 1 1 2 3 4 3 Sample Output Scenario #1: A1 Scenari ...

  4. POJ 2488 A Knight's Journey (回溯法 | DFS)

    题目链接:http://poj.org/problem?id=2488 题意: 在国际象棋的题盘上有一个骑士,骑士只能走“日”,即站在某一个位置,它可以往周围八个满足条件的格子上跳跃,现在给你一个p ...

  5. poj 2488 A Knight's Journey( dfs )

    题目:http://poj.org/problem?id=2488 题意: 给出一个国际棋盘的大小,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径. #include <io ...

  6. Poj 2488 A Knight's Journey(搜索)

    Background The knight is getting bored of seeing the same black and white squares again and again an ...

  7. [poj]2488 A Knight's Journey dfs+路径打印

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 45941   Accepted: 15637 Description Bac ...

  8. POJ 2488 A Knight's Journey【DFS】

    补个很久之前的题解.... 题目链接: http://poj.org/problem?id=2488 题意: 马走"日"字,让你为他设计一条道路,走遍所有格,并输出字典序最小的一条 ...

  9. POJ 2488 A Knight's Journey

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

随机推荐

  1. JavaWeb-用过滤器修改请求的返回状态码

    问题: 客户SDK对接服务,默认只识别200和非200的请求状态码.需要修改当前应用的状态码(如将201转为200) 解决方案:通过扩展HttpServletResponseWrapper,获取到每个 ...

  2. 记录一次ABP下载模板的坑

    1.拉取ABP官网的模板的最新代码,我的代码结构是这样的 https://aspnetboilerplate.com/Templates 环境安装的部分我就不说明了.node.js  npm 等等部分 ...

  3. Delphi 方法指令字

  4. 前端基础(十):Bootstrap Switch 选择框开关控制

    简介 Bootstrap Switch是一款轻量级插件,可以给选择框设置类似于开关的样式 它是依赖于Bootstrap的一款插件 下载 下载地址 在线引用 导入 因为它是依赖于Bootstrap的一款 ...

  5. Linux基础知识之文件的权限(一)

    Linux基础知识之文件权限(一) Linux优点之一就是它拥有多用户多任务的环境,在提供文件共享的同时也能保证用户文件的安全性.所以,设置文件的权限管理变得尤为重要. 权限讲解 [der@Der ~ ...

  6. CSP2019 退役记

    本来想写"退役在即"的,考完 Day2 后直接改成"退役记"了 Day 0 在 ssf 的机房里继续变弱,自己写了一遍 splay 板子,居然写对了,开心 非常 ...

  7. spark-聚合算子aggregatebykey

    spark-聚合算子aggregatebykey Aggregate the values of each key, using given combine functions and a neutr ...

  8. Qt 模型/视图结构

    MVC是一种与用户界面相关的设计模式.通过使用此模型,可以有效地分离数据和用户界面.MVC设计模式包含三要素:表示数据的模型(Model).表示用户界面的视图(View)和定义了用户在界面上的操作控制 ...

  9. python基于opencv实现人脸定位

    import cv2 # 读取图片 img = cv2.imread("image.jpg") # 加载模型,模型可以从https://github.com/opencv/open ...

  10. JavaScript程序设计——FOR循环

    FOR循环流程图: 1.编写求6!的阶乘的代码 2.编写10个10相加的和 3.编写1+2+3+...+10连续相加的和 4.编写1+(1+2)+(1+2+3)+...+(1+2+3+...+10)连 ...