老鼠走迷宫(1)输出唯一路径(C语言)
2014-08-01 15:20
120 查看
需求
有一个迷宫,在迷宫的某个出口放着一块奶酪。将一只老鼠由某个入口处放进去,它必须穿过迷宫,找到奶酪。请找出它的行走路径。STEP 1 题目转化
我们用一个二维数组来表示迷宫,用2表示迷宫的墙壁,用0表示通路。老鼠每走到一个格子的时候就将该位置的值置为1,表示老鼠的行走路径包括这个格子。
STEP 2 编程思路
⑴这个题目可以用递归方法,只需要最后一步走到迷宫出口所在的格子。⑵每一步测试上、下、左、右四个方向,选择一个方向前进。
STEP 3 要点整理
⑴走过的格子需要标记,否则无法输出路径。⑵递归算法只需弄清递归出口(即结束条件)和分解后的问题,切忌想得太深太远。
----------------------------------华丽丽的分割线---------------------------代码君要出场了-----[b]--------------[/b]
#include <stdio.h> int maze[9][9] = { {2, 2, 2, 2, 2, 2, 2, 2, 2}, {0, 0, 2, 2, 2, 2, 0, 2, 2}, {2, 0, 0, 0, 0, 0, 0, 0, 2}, {2, 0, 2, 2, 0, 2, 2, 0, 2}, {0, 2, 0, 2, 0, 2, 2, 0, 2}, {2, 2, 0, 2, 0, 2, 2, 0, 2}, {2, 2, 0, 2, 0, 0, 0, 0, 2}, {2, 2, 0, 2, 0, 2, 2, 2, 2}, {2, 2, 2, 2, 0, 2, 2, 2, 2}, }; //构建迷宫 int start_x = 1, start_y = 0; //设置起点 int end_x = 8, end_y = 4; //设置终点 int success = 0; int step(int x, int y); int main(int argc, char argv[]) { int x, y; printf("maze:\n"); //打印迷宫图,为方便查看,将数字换为图形打印 for(x = 0; x < 9; x++) { for(y = 0; y < 9; y++) { if(maze[x][y] == 2) printf("■"); else printf("□"); } printf("\n"); } if(step(start_x, start_y) == 0) { printf("No way!\n"); } else { printf("You are free!\n"); for(x = 0; x < 9; x++) { for(y = 0; y < 9; y++) { if(maze[x][y] == 2) printf("■"); else if(maze[x][y] == 1) printf("☆"); else printf("□"); } printf("\n"); } } printf("\n"); return 0; } int step(int x, int y) //用递归算法求解路径 { maze[x][y] = 1; if(x == end_x && y == end_y) { success = 1; } if(success != 1 && y < (LEN - 1) && maze[x][y + 1] == 0){step(x, y + 1);} if(success != 1 && x > 0 && maze[x][y - 1] == 0){step(x, y - 1);} if(success != 1 && x < (LEN - 1) && maze[x + 1][y] == 0){step(x + 1, y);} if(success != 1 && y > 0 && maze[x - 1][y] == 0){step(x - 1, y);} if(success != 1) { maze[x][y] = 0; } return success; }
欢迎转载,请备注原始连接http://www.cnblogs.com/liuliuliu/p/3885026.html,并注明转载。
作者bibibi_liuliu,联系方式395985239@qq.com
相关文章推荐
- 老鼠走迷宫(2)输出所有路径(C语言)
- C语言应用:将128位二进制数据转换为十六进制输出
- PE文件之旅(C语言描述) 第三篇 -- 加壳与脱壳的战场 输出表
- C语言调用exe并将结果输出到文件
- C语言输出到文件的方法
- c语言输出格式 漫谈
- C语言中,链表的创建、输入、输出、链接。
- C语言调用exe并将结果输出到文件(续)
- Sharepoint 站点下应用程序虚拟路径下出现"不能进行输出缓存处理",错误ID 5787 解决方法
- c语言经典的排序函数swap():输入的两个整数按大小顺序输出。
- 本人写的迷宫,不过知道这样才能输出所有的路径
- C语言的8进制和16进制及输出对应字符(10)
- 用C语言输出乘法口诀表
- C语言格式化输出中的浮点数精度截断
- C语言的文件输入输出(39)
- c语言输出自己源代码和反源代码
- 用拓扑排序+动态规划的方法输出DAG的所有可能的路径
- C语言的printf函数(格式输出函数)
- 输出当前路径
- c语言将大于整数m且紧靠m的k个素数输出