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

举报
悦来客栈的老板 发表于 2020/12/30 00:06:49 2020/12/30
【摘要】 说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径。 解法老鼠的走法有上、左、下、右四个方向,在每前进一格之后就选一个方向前进,无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四个方向,直到走到出口为止,这是回溯的基本题,请直接看程式应就可以理解 #include &...

说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁,使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径。

解法老鼠的走法有上、左、下、右四个方向,在每前进一格之后就选一个方向前进,无法前进时退回选择下一个可前进方向,如此在阵列中依序测试四个方向,直到走到出口为止,这是回溯的基本题,请直接看程式应就可以理解



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

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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