博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Algorithm Gossip(5) 老鼠找迷宫(1)
阅读量:4577 次
发布时间:2019-06-08

本文共 1726 字,大约阅读时间需要 5 分钟。

前言

This Series aritcles are all based on the book 《经典算法大全》; 对于该书的所有案例进行一个探究和拓展,并且用python和C++进行实现; 目的是熟悉常用算法过程中的技巧和逻辑拓展。

提出问题

Algorithm Gossip: 老鼠找迷宫(1)

在迷宫中找到出入口的路径

分析和解释

代码

c 语言版本

#include 
#include
int visit(int, int);int maze[7][7] ={{
2, 2, 2, 2, 2, 2, 2},{
2, 0, 0, 0, 0, 0, 2},{
2, 0, 2, 0, 2, 0, 2},{
2, 0, 0, 2, 0, 2, 2},{
2, 2, 0, 2, 0, 2, 2},{
2, 0, 0, 0, 0, 0, 2},{
2, 2, 2, 2, 2, 2, 2}};int startI = 1, startJ = 1; // 入口int endI = 5, endJ = 5; // 出口int success = 0;int main(void){ int i, j; printf("显示迷宫:\n"); for(i = 0; i < 7; i++) { for(j = 0; j < 7; j++) if(maze[i][j] == 2) printf("█"); else printf(" "); printf("\n"); } if(visit(startI, startJ) == 0) printf("\n没有找到出口!\n"); else { printf("\n显示路径:\n"); for(i = 0; i < 7; i++) { for(j = 0; j < 7; j++) { if(maze[i][j] == 2) printf("█"); else if(maze[i][j] == 1) printf("◇"); else printf(" "); } printf("\n"); } } return 0;}int visit(int i, int j){ maze[i][j] = 1; if(i == endI && j == endJ) success = 1; if(success != 1 && maze[i][j+1] == 0) visit(i, j+1); if(success != 1 && maze[i+1][j] == 0) visit(i+1, j); if(success != 1 && maze[i][j-1] == 0) visit(i, j-1); if(success != 1 && maze[i-1][j] == 0) visit(i-1, j); if(success != 1) maze[i][j] = 0; return success;}

拓展和关联

类似递归求解的可以参阅我的消消乐小程序和八皇后问题。跟这个递归原理一样。回溯法, 八皇后的解答也有一个解和全解输出形式, 改变也很小。

后记

参考书籍

  • 《经典算法大全》
  • 维基百科

转载于:https://www.cnblogs.com/actanble/p/6713411.html

你可能感兴趣的文章
扫盲记-第五篇--图像全景分割
查看>>
Haproxy安装与配置
查看>>
Linux之Ganglia源码安装
查看>>
Android中的Handler,Looper,Message机制
查看>>
Roman Numeral Converter
查看>>
魔幻之翼的博客
查看>>
java提高篇(四)-----理解java的三大特性之多态
查看>>
Python基础-----shelve模块
查看>>
文件发送成功率低的问题(1)
查看>>
异步方法 async/await
查看>>
37 数组的概念
查看>>
去掉SrollView、GrdiView、ListView、ViewPager等滑动到边缘的光晕效果
查看>>
我选择的……
查看>>
akka actor初探
查看>>
linux清理Java环境
查看>>
如何更改webstrom的默认端口63342
查看>>
最短路计数
查看>>
SharedPreferences
查看>>
Android性能优化方法(六)
查看>>
yii2.0 报错Cookievalidationkey Must Be Configured With A Secret Key
查看>>