Linux C一站式学习习题答案12.3.3迷宫问题深度优先
来源:互联网 发布:linux中socket通信 编辑:程序博客网 时间:2024/05/20 20:21
现在我们用堆栈解决一个有意思的问题,定义一个二维数组:
int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线。
3、上一节我们实现了一个基于堆栈的程序,然后改写成递归程序,用函数调用的栈帧替代自己实现的堆栈。本节的DFS算法也是基于堆栈的,请把它改写成递归程序,这样改写可以避免使用predecessor
数据结构,想想该怎么做。注:转载请注明源地址:http://blog.csdn.net/whorus1/article/list/2,谢谢!
#include <stdio.h>#define MAX_LEN_STK 512#define MAX_ROW 5#define MAX_COL 5int top = 0;struct point{int row, col;};struct point path[MAX_LEN_STK];/*使用一个数组代替堆栈*/struct point make_from_cor(int prow, int pcol){struct point p;p.row = prow;p.col = pcol;return p;}int maze[MAX_ROW][MAX_COL] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};void print_maze(){int i, j;for (i = 0; i < MAX_ROW; i++){for (j = 0; j < MAX_COL; j++){printf("%d ", maze[i][j]);}printf("\n");}printf("*********\n");}int path_search(struct point p){maze[p.row][p.col] = 2;print_maze();if (p.row == MAX_ROW - 1 && p.col == MAX_COL - 1)/* goal */{path[top++] = make_from_cor(p.row, p.col);return 1;}if ((p.col < MAX_COL - 1 && maze[p.row][p.col+1] == 0) /* right */&&(path_search(make_from_cor(p.row, p.col+1)))){path[top++] = make_from_cor(p.row, p.col);return 1;}if ((p.row < MAX_ROW - 1 && maze[p.row+1][p.col] == 0)/* down */&&(path_search(make_from_cor(p.row+1, p.col)))){path[top++] = make_from_cor(p.row, p.col);return 1;}if ((p.col > 0 && maze[p.row][p.col-1] == 0)/* left */&&(path_search(make_from_cor(p.row, p.col-1)))){path[top++] = make_from_cor(p.row, p.col);return 1;}if ((p.row > 0 && maze[p.row-1][p.col] == 0)/* up */&& (path_search(make_from_cor(p.row-1, p.col)))){path[top++] = make_from_cor(p.row, p.col);return 1;}return 0;}void print_path(){int i;--top;for (i = top; i >= 0; i--){printf("(%d, %d)\n", path[i].row, path[i].col);}}int main(void){struct point p = {0, 0};if (path_search(p)){print_path();}elseprintf("No path!\n");return 0;}
0 0
- Linux C一站式学习习题答案12.3.3迷宫问题深度优先
- Linux C一站式学习习题答案说明
- Linux C一站式学习习题答案2.5
- Linux C一站式学习习题答案4.1
- Linux C一站式学习习题答案19.4
- Linux C一站式学习习题答案4.2.2
- Linux C一站式学习习题答案5.1.1
- Linux C一站式学习习题答案5.1.2 四舍五入
- Linux C一站式学习习题答案5.3.1最大公约数
- Linux C一站式学习习题答案5.3.2Fibonacci数列
- Linux C一站式学习习题答案6.1.1.1
- Linux C一站式学习习题答案6.1.1.2
- Linux C一站式学习习题答案6.1.2统计个数
- Linux C一站式学习习题答案6.4求素数
- Linux C一站式学习习题答案6.5.1小九九乘法表
- Linux C一站式学习习题答案6.5.2打印菱形
- Linux C一站式学习习题答案7.2.1复数
- Linux C一站式学习习题答案7.2.2分数加减乘除
- NASA发现人类史上最大黑洞 质量为太阳400亿倍
- SQL Server 2008 自动备份数据库 .
- SAP SD 销售佣金在Billing中预提
- 数据库表设计三大范式原则
- java中相对路径
- Linux C一站式学习习题答案12.3.3迷宫问题深度优先
- 将tomcat加入到linux service中,并支持多个tomcat。
- 全部合法顺序——对栈和队列的应用
- 堆和栈
- SMI接口简介(基于IP113F芯片的学习)
- Git创建和公钥生成
- powerdesigner16破解步骤
- SQL核心语句(非常实用的几个技巧)
- IOS 判断手机设备上是否安装某款应用