老鼠走迷宫(2)输出所有路径(C语言)
2014-08-01 15:29
302 查看
需求
有一个迷宫,在迷宫的某个出口放着一块奶酪。将一只老鼠由某个入口处放进去,它必须穿过迷宫,找到奶酪。请找出它的行走路径。STEP 1 题目转化
我们用一个二维数组来表示迷宫,用2表示迷宫的墙壁,用0表示通路。老鼠每走到一个格子的时候就将该位置的值置为1,表示老鼠的行走路径包括这个格子。
STEP 2 编程思路
⑴这个题目可以用递归方法,只需要最后一步走到迷宫出口所在的格子。⑵每一步测试上、下、左、右四个方向,选择一个方向前进。
STEP 3 要点整理
⑴输出所有路径的算法与输出单条路径相同,需要修改的是:打印函数放入递归函数中,才能实现多次输出。⑵在递归选择下一步方向时,if条件添加“x < LEN && y < LEN”,避免溢出。
----------------------------------华丽丽的分割线---------------------------代码君要出场了-----[b]--------------[/b]
#include <stdio.h> #include <stdlib.h> #define LEN 9 int maze[LEN][LEN] = { {2, 0, 2, 2, 2, 0, 2, 2, 2}, {2, 0, 2, 2, 2, 0, 0, 2, 2}, {2, 0, 0, 0, 0, 0, 0, 0, 2}, {2, 0, 2, 2, 0, 2, 2, 0, 2}, {2, 0, 0, 2, 0, 2, 2, 0, 2}, {2, 0, 0, 2, 0, 2, 2, 0, 2}, {2, 0, 0, 2, 0, 0, 0, 0, 0}, {2, 0, 0, 0, 0, 2, 2, 2, 2}, {2, 0, 2, 2, 0, 2, 2, 2, 2}, }; //构建迷宫 int start_x = 1, start_y = 0; //设置起点 int end_x = 8, end_y = 4; //设置终点 void step(int x, int y); void print_maze(); int main(int argc, char argv[]) { printf("maze:\n"); //打印迷宫图,为方便查看,将数字换为图形打印 print_maze(); step(start_x, start_y); return 0; } void step(int x, int y) //用递归算法求解路径 { maze[x][y] = 1; if(x == end_x && y == end_y) { print_maze(); //打印函数放入递归中,每找到一条成功路径打印一次 } if(y < (LEN - 1) && maze[x][y + 1] == 0){step(x, y + 1);} //边界条件,避免溢出,感谢 @别把白天当黑夜 指正 if(x < (LEN - 1) && maze[x + 1][y] == 0){step(x + 1, y);} if(y > 0 && maze[x][y - 1] == 0){step(x, y - 1);} if(x > 0 && maze[x - 1][y] == 0){step(x - 1, y);} maze[x][y] = 0; } void print_maze() { int x, y; for(x = 0; x < LEN; x++) { for(y = 0; y < LEN; y++) { if(maze[x][y] == 2) printf("■"); else if(maze[x][y] == 1) printf("☆"); else if(maze[x][y] == 0) printf("□"); } printf("\n"); } printf("\n"); }
欢迎转载,请备注原始连接http://www.cnblogs.com/liuliuliu/p/3885099.html,并注明转载。
作者bibibi_liuliu,联系方式395985239@qq.com
相关文章推荐
- 老鼠走迷宫(1)输出唯一路径(C语言)
- 读取电脑所有磁盘文件并输出路径
- 输出迷宫的所有路径和最短路径
- 输出二叉树中所有从根结点到叶子结点的路径
- 使用php scandir()函数遍历文件夹并输出所有文件路径
- PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
- C语言编程——输出100—200之间的所有素数和非素数
- 读取电脑所有磁盘文件并输出路径
- 用JAVA扫描指定文件夹下面所有以.txt结尾的文件,并将其绝对路径输出 .
- 用JAVA扫描指定文件夹下面所有以.txt结尾的文件,并将其绝对路径输出
- 怎样输出二叉树的所有路径(按字典序)?
- 输出迷宫的所有路径和最短路径
- C语言 输出一个数组中,所有元素之和为0的子序列
- php 深度优先递归输出路径下所有文件
- 输出所有二叉树的路径
- C语言输出目录下所有的文 件名
- 本人写的迷宫,不过知道这样才能输出所有的路径
- C语言-输出100-200之间所有素数
- 输出二叉树中所有从根结点到叶子结点的路径
- 图两点间的最短路径,所有路径算法C语言实现