数据结构之深度优先搜索(用栈实现)问题
来源:互联网 发布:诗歌音步 知乎 编辑:程序博客网 时间:2024/05/18 01:12
深度优先搜索
可以这样理解,向四边延伸搜索,然后遇到不能搜索的时候就回退,也就是回溯思想,然后再去其它可能地方搜索。
题目:
定义一个二维数组:
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表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线。程序如下:
#include<stdio.h>#define MAX_ROW 5#define MAX_COL 5int top = 0;struct Node { int row; int col;} stack[512];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 push_stack(struct Node node){ stack[top++] = node;}struct Node pop_stack(){ return stack[--top];}int is_empty() { return top == 0;}void printf_stack(){ for (int i = 0; i < MAX_ROW; i++) { for (int j = 0; j < MAX_COL; j++) { printf("%d\t", maze[i][j]); } printf("\n"); } printf("***********\n");}/* *这里需要放坐标的二位数组 * */struct Node before[MAX_ROW][MAX_COL] = { {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}}, {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}}, {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}}, {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}}, {{-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}, {-1, -1}},};void visit(int row, int col, struct Node p){ struct Node node = {row, col}; maze[row][col] = 2; before[row][col] = p; push_stack(node);}int main() { struct Node p = {0, 0}; maze[p.row][p.col] = 2; push_stack(p); while (!is_empty()) {//这里我写成了!is_empty,忘记写(),以后一定要记得写,日了狗 p = pop_stack(); if (p.row == MAX_ROW - 1 && p.col == MAX_COL - 1) { break; } if (p.col + 1 < MAX_COL && maze[p.row][p.col + 1] == 0) { visit(p.row, p.col + 1, p); /**右边**/ } if (p.row + 1 < MAX_ROW && maze[p.row + 1][p.col] == 0) { visit(p.row + 1, p.col, p); /**下边**/ } if (p.col - 1 >= 0 && maze[p.row][p.col - 1] == 0) { visit(p.row, p.col - 1, p); /**左边**/ } if (p.row - 1 >= 0 && maze[p.row - 1][p.col] == 0) { visit(p.row - 1, p.col, p); /**上边**/ } printf_stack(); } if (p.row == MAX_ROW - 1 && p.col == MAX_COL - 1) { printf("%d,%d\n", p.row, p.col); while (before[p.row][p.col].row != -1) { p = before[p.row][p.col]; printf("%d,%d\n", p.row, p.col); } } else { printf("no this path"); } return 0;}
结果展示:
2100021010000000111000010***********2100021010200000111000010***********2100021010220002111000010***********2100021010220002111020010***********2100021010220002111022010***********2100021010220002111022210***********2100021010220002111022210***********2100021010222002111022210***********2100021210222202111022210***********2120021210222202111022210***********2122021210222202111022210***********2122221210222202111022210***********2122221212222202111022210***********2122221212222222111022210***********2122221212222222111222210***********2122221212222222111222212***********4,43,42,41,40,40,30,21,22,22,12,01,00,0
0 0
- 数据结构之深度优先搜索(用栈实现)问题
- 数据结构之深度优先搜索
- 数据结构之图(深度优先搜索和广度优先搜索使用的队列和栈)
- 数据结构之广度优先搜索(队列实现)问题
- 【深度优先搜索(DFS)算法】数据结构之图的深度优先搜索算法DFS初试
- Java实现数据结构之深度优先搜索DFS和广度优先搜索BFS
- 数据结构之图的深度优先搜索
- 数据结构之------深度优先搜索(DFS)
- 深度优先搜索之部分和问题
- 深度优先搜索之城堡问题
- 用栈实现图的深度优先搜索Java实现
- 【数据结构笔记】4:非递归实现深度优先搜索(DFS)
- 用深度优先搜索解迷宫问题
- 深度优先搜索(POJ1164 城堡问题)
- 深度优先搜索DFS(迷宫问题)
- 部落卫队问题(深度优先搜索)
- 装载问题(深度优先搜索)
- 背包问题(深度优先搜索解法)
- python3学习笔记(贴别人的文章)
- 关于页面跳转的集中方法
- HBase 集群部署
- SVN服务器的搭建与使用(一)
- Java的NIO之ByteBuffer底层分析
- 数据结构之深度优先搜索(用栈实现)问题
- 一个售后工程师的逆袭
- 解决AndroidStudio引入Lambda之后导致ButterKnife8.4.0版本无法初始化View问题
- 【Python爬虫系列】Python 爬取上海链家二手房数据
- HOTween简单应用
- 万能Adapter,让你的代码更简洁
- 深度学习Caffe实战笔记(7)Caffe平台下,如何调整卷积神经网络结构
- 第三篇:赔率和盘口的几种形态
- mysql优化(三) 逆规范化与反三范式