Algorithm Gossip(5) 老鼠找迷宫(1)
2017-04-13 19:48
344 查看
前言
This Series aritcles are all based on the book 《经典算法大全》; 对于该书的所有案例进行一个探究和拓展,并且用python和C++进行实现; 目的是熟悉常用算法过程中的技巧和逻辑拓展。提出问题
Algorithm Gossip: 老鼠找迷宫(1)在迷宫中找到出入口的路径
分析和解释
代码
c 语言版本
#include <stdio.h> #include <stdlib.h> 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; }
拓展和关联
类似递归求解的可以参阅我的消消乐小程序和八皇后问题。跟这个递归原理一样。回溯法, 八皇后的解答也有一个解和全解输出形式, 改变也很小。后记
参考书籍
《经典算法大全》维基百科
相关文章推荐
- Algorithm Gossip(6) 老鼠找迷宫(2)
- Algorithm Gossip: 老鼠走迷官(一)
- 5.Algorithm Gossip: 老鼠走迷官(一)
- Algorithm Gossip: 费式数列
- [C++]数据结构课程设计:迷宫老鼠1.0
- Algorithm Gossip (16) 超长整数运算(大数运算)
- Algorithm Gossip (22) 中序式转后序式(前序式)
- [两只老鼠跑得快]小鼠迷宫问题
- 数据结构经典算法学习之老鼠走迷宫01
- 2014 UESTC Training for Search Algorithm Problem F 方老师与迷宫
- Algorithm-Gossip 经典算法系列 说明文档
- Algorithm Gossip (17) 长 PI
- Algorithm Gossip (24) 洗扑克牌(乱数排列)
- 电子老鼠闯迷宫
- C#算法大全-2-Algorithm Gossip: 费式数列
- Algorithm-Gossip(1) 河内之塔 / 汉罗塔
- AlgorithmGossip (19) 完美数
- Algorithm Gossip:生命游戏
- Algorithm Gossip: 最大访客数
- NOJ(1042)-分支限界-电子老鼠闯迷宫