当前位置:   article > 正文

追梦算法----马的遍历_中国象棋半张棋盘如图(a)所示。马自左下角往右上角跳。今规定只许往右跳,不许往左

中国象棋半张棋盘如图(a)所示。马自左下角往右上角跳。今规定只许往右跳,不许往左

说明

中国象棋半张棋盘如图(a)所示。马自左下角往右上角跳。今规定只许往右跳,不许往左跳,且要求马跳的方式按照(b)图顺时针深度优先递归。比如图(a)中所示为一种跳行路线。如果马要从0,0点,跳到4,8点,前6种跳法的打印格式如下,请参考前6种跳的方式,输出马从0,0点到4,8点所有可能的跳的路线。

1:0,0->2,1->4,2->3,4->4,6->2,7->4,8
2:0,0->2,1->4,2->3,4->1,5->3,6->4,8
3:0,0->2,1->4,2->3,4->1,5->2,7->4,8
4:0,0->2,1->4,2->2,3->4,4->3,6->4,8
5:0,0->2,1->4,2->2,3->4,4->2,5->4,6->2,7->4,8
6:0,0->2,1->4,2->2,3->4,4->2,5->0,6->2,7->4,8

...

输入格式

输出格式

按要求输出路径

 dfs模板

  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <algorithm>
  4. #include <iostream>
  5. #include <string.h>
  6. #include <queue>
  7. #include <stack>
  8. #include <map>
  9. #include <set>
  10. #include <vector>
  11. using namespace std;
  12. int n,m,ans=0,vis[15][15];
  13. int dx[4]= {2,1,-1,-2},dy[4]= {1,2,2,1};
  14. struct te {
  15. int dx;
  16. int dy;
  17. };
  18. te a[20];
  19. void dfs(int x,int y,int step) {
  20. if(x==4&&y==8) {
  21. a[step].dx=x;
  22. a[step].dy=y;
  23. ans++;
  24. cout<<ans<<":"<<a[0].dx<<","<<a[0].dy;
  25. for(int i=1; i<=step; i++) {
  26. cout<<"->"<<a[i].dx<<","<<a[i].dy;
  27. }
  28. cout<<endl;
  29. }
  30. vis[x][y]=1;
  31. a[step].dx=x;
  32. a[step].dy=y;
  33. for(int i=0; i<4; i++) {
  34. int tx=x+dx[i],ty=y+dy[i];
  35. if(tx>=0&&ty>=0&&tx<=4&&ty<=8&&vis[tx][ty]==0) {
  36. step++;
  37. dfs(tx,ty,step);
  38. vis[tx][ty]=0;
  39. step--;
  40. }
  41. }
  42. }
  43. int main() {
  44. // scanf("%d%d",&n,&m);
  45. dfs(0,0,0);
  46. return 0;
  47. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/786233
推荐阅读
相关标签
  

闽ICP备14008679号