Algorithm Gossip(6) 老鼠找迷宫(2)
2017-04-13 19:51
295 查看
前言
This Series aritcles are all based on the book 《经典算法大全》; 对于该书的所有案例进行一个探究和拓展,并且用python和C++进行实现; 目的是熟悉常用算法过程中的技巧和逻辑拓展。提出问题
Algorithm Gossip: 老鼠找迷宫(2)在迷宫中找到出入口的路径; 若不止一条, 那么要求输出所有的条数呢。
类似于八皇后问题的解答,只增加一行即可。
分析和解释
回溯法代码
#include <stdio.h> #include <stdlib.h> int visit(int, int); int visit2(int, int) //this is the function for this problem; 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; } void visit2(int i, int j) { int m, n; maze[i][j] = 1; if(i == endI && j == endJ) { printf("\n显示路径:\n"); for(m = 0; m < 9; m++) { for(n = 0; n < 9; n++) if(maze[m] == 2) printf("█"); else if(maze[m] == 1) printf("◇"); else printf(" "); printf("\n"); } } if(maze[i][j+1] == 0) visit(i, j+1); if(maze[i+1][j] == 0) visit(i+1, j); if(maze[i][j-1] == 0) visit(i, j-1); if(maze[i-1][j] == 0) visit(i-1, j); maze[i][j] = 0; }
”’
拓展和关联
类似递归求解的可以参阅我的消消乐小程序和八皇后问题。跟这个递归原理一样。hlink
后记
参考书籍
《经典算法大全》维基百科
相关文章推荐
- Algorithm Gossip(5) 老鼠找迷宫(1)
- Algorithm Gossip: 老鼠走迷官(一)
- 4、三色棋(Algorithm Gossip)
- .Algorithm Gossip (12) 双色、三色河内塔
- Algorithm Gossip :八皇后问题
- Algorithm Gossip: 約瑟夫問題(Josephus Problem)
- Algorithm Gossip (13) 背包问题 ( Knapsack Problem)
- Algorithm Gossip(14) 蒙地卡罗法求 PI
- Algorithm Gossip: 河内塔
- [Java]数据结构课程设计:迷宫老鼠2.0(完整项目代码与设计报告)
- 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