每日一算法:老鼠走迷官(二)

举报
悦来客栈的老板 发表于 2020/12/30 01:51:43 2020/12/30
【摘要】 说明由于迷宫的设计,老鼠走迷宫的入口至出口路径可能不只一条,如何求出所有的路径呢? 解法求所有路径看起来复杂但其实更简单,只要在老鼠走至出口时显示经过的路径,然后退回上一格重新选择下一个位置继续回溯就可以了,比求出单一路径还简单,我们的程式只要作一点修改就可以了。 #include <stdio.h> void visit(int, int);int maze...

说明由于迷宫的设计,老鼠走迷宫的入口至出口路径可能不只一条,如何求出所有的路径呢?

解法求所有路径看起来复杂但其实更简单,只要在老鼠走至出口时显示经过的路径,然后退回上一格重新选择下一个位置继续回溯就可以了,比求出单一路径还简单,我们的程式只要作一点修改就可以了。


  
  1. #include <stdio.h>
  2. void visit(int, int);
  3. int maze[9][9] = {
  4. {2, 2, 2, 2, 2, 2, 2, 2, 2},
  5. {2, 0, 0, 0, 0, 0, 0, 0, 2},
  6. {2, 0, 2, 2, 0, 2, 2, 0, 2},
  7. {2, 0, 2, 0, 0, 2, 0, 0, 2},
  8. {2, 0, 2, 0, 2, 0, 2, 0, 2},
  9. {2, 0, 0, 0, 0, 0, 2, 0, 2},
  10. {2, 2, 0, 2, 2, 0, 2, 2, 2},
  11. {2, 0, 0, 0, 0, 0, 0, 0, 2},
  12. {2, 2, 2, 2, 2, 2, 2, 2, 2}};
  13. int startI = 1, startJ = 1; // 入口
  14. int endI = 7, endJ = 7; // 出口
  15. int main(void)
  16. {
  17. int i, j;
  18. printf("显示迷宫:\n");
  19. for(i = 0; i < 9; i++)
  20. {
  21. for(j = 0; j < 9; j++)
  22. {
  23. if(maze[i][j] == 2)
  24. {
  25. printf("█");
  26. }
  27. else
  28. {
  29. printf(" ");
  30. }
  31. }
  32. printf("\n");
  33. }
  34. visit(startI, startJ);
  35. return 0;
  36. }
  37. void visit(int i, int j)
  38. {
  39. int m, n;
  40. maze[i][j] = 1;
  41. if(i == endI && j == endJ)
  42. {
  43. printf("\n显示路径:\n");
  44. for(m = 0; m < 9; m++)
  45. {
  46. for(n = 0; n < 9; n++)
  47. {
  48. if(maze[m][n] == 2)
  49. {
  50. printf("█");
  51. }
  52. else if(maze[m][n] == 1)
  53. {
  54. printf("◇");
  55. }
  56. else
  57. {
  58. printf(" ");
  59. }
  60. }
  61. printf("\n");
  62. }
  63. }
  64. if(maze[i][j+1] == 0)
  65. {
  66. visit(i, j+1);
  67. }
  68. if(maze[i+1][j] == 0)
  69. {
  70. visit(i+1, j);
  71. }
  72. if(maze[i][j-1] == 0)
  73. {
  74. visit(i, j-1);
  75. }
  76. if(maze[i-1][j] == 0)
  77. {
  78. visit(i-1, j);
  79. }
  80. maze[i][j] = 0;
  81. }

文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq523176585/article/details/15339447

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。