C基础:堆栈性质应用深度搜索
2013-08-08 19:30
435 查看
转载请注明出处:http://blog.csdn.net/droyon/article/details/9840619
堆栈性质:先进后出
先进后出的特点,让堆栈具备了深度优先的特点。
如下图:红色数字组成了5x5的方阵,我们要沿着值为0的位置进行搜索,值为1的位置不可跨越。
操作:
1、将方阵加入堆栈。2、从左上角进入,检查四周可以行走的位置(值为0,可行走)3、打印行走路线图(图中标出了步数)
由于堆栈先进后出的性质,在搜索路线行走时,他会优先沿着一个方向“深度”进行下去。
测试例子:
打印:
堆栈性质:先进后出
先进后出的特点,让堆栈具备了深度优先的特点。
如下图:红色数字组成了5x5的方阵,我们要沿着值为0的位置进行搜索,值为1的位置不可跨越。
操作:
1、将方阵加入堆栈。2、从左上角进入,检查四周可以行走的位置(值为0,可行走)3、打印行走路线图(图中标出了步数)
由于堆栈先进后出的性质,在搜索路线行走时,他会优先沿着一个方向“深度”进行下去。
测试例子:
#include<stdio.h> #define MAX_ROW 5 #define MAX_COL 5 int curIndex = 0; struct point{ int x,y; }move_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 print_maze(){ int i = 0,j=0; printf("第%d次操作结果**************************\n",++curIndex); for(i=0;i<MAX_ROW;i++){ for(j=0;j<MAX_COL;j++){ if(maze[i][j] == 0){ printf("%c\t",'#'); }else if(maze[i][j] == 2){ printf("%s\t","<0>"); }else{ printf("%c\t",'|'); } } printf("\n"); } printf("**********************************\n"); } void print_maze_value(){ int i=0,j=0; for(i=0;i<MAX_ROW;i++){ for(j=0;j<MAX_COL;j++){ printf("%d \t",maze[i][j]); } printf("\n"); } } int top =0; void push(struct point p){ move_stack[top] = p; top++; } struct point pop(){ top--; return move_stack[top]; } int isEmpty(){ return top == 0; } void visit(int row,int col){ maze[row][col] = 2; struct point visit_point = {row,col}; push(visit_point); print_maze(); } int main(void){ struct point p = {0,0}; maze[0][0] = 2; push(p); while(!isEmpty()){ p = pop(); //printf("p.x : %d,p.y : %d\n",p.x,p.y); if(p.x ==MAX_ROW-1 && p.y == MAX_COL-1){ continue; } if(p.x+1<MAX_ROW&&maze[p.x+1][p.y]==0){ visit(p.x+1,p.y); } if(p.x-1>-1&&maze[p.x-1][p.y] == 0){ visit(p.x-1,p.y); } if(p.y+1<MAX_COL&&maze[p.x][p.y+1]==0){ visit(p.x,p.y+1); } if(p.y-1>-1&&maze[p.x][p.y-1]==0){ visit(p.x,p.y-1); } } return 0; }
打印:
第1次操作结果************************** <0> | # # # <0> | # | # # # # # # # | | | # # # # | # ********************************** 第2次操作结果************************** <0> | # # # <0> | # | # <0> # # # # # | | | # # # # | # ********************************** 第3次操作结果************************** <0> | # # # <0> | # | # <0> # # # # <0> | | | # # # # | # ********************************** 第4次操作结果************************** <0> | # # # <0> | # | # <0> <0> # # # <0> | | | # # # # | # ********************************** 第5次操作结果************************** <0> | # # # <0> | # | # <0> <0> <0> # # <0> | | | # # # # | # ********************************** 第6次操作结果************************** <0> | # # # <0> | <0> | # <0> <0> <0> # # <0> | | | # # # # | # ********************************** 第7次操作结果************************** <0> | # # # <0> | <0> | # <0> <0> <0> <0> # <0> | | | # # # # | # ********************************** 第8次操作结果************************** <0> | # # # <0> | <0> | # <0> <0> <0> <0> <0> <0> | | | # # # # | # ********************************** 第9次操作结果************************** <0> | # # # <0> | <0> | # <0> <0> <0> <0> <0> <0> | | | <0> # # # | # ********************************** 第10次操作结果************************** <0> | # # # <0> | <0> | <0> <0> <0> <0> <0> <0> <0> | | | <0> # # # | # ********************************** 第11次操作结果************************** <0> | # # <0> <0> | <0> | <0> <0> <0> <0> <0> <0> <0> | | | <0> # # # | # ********************************** 第12次操作结果************************** <0> | # <0> <0> <0> | <0> | <0> <0> <0> <0> <0> <0> <0> | | | <0> # # # | # ********************************** 第13次操作结果************************** <0> | <0> <0> <0> <0> | <0> | <0> <0> <0> <0> <0> <0> <0> | | | <0> # # # | # ********************************** 第14次操作结果************************** <0> | <0> <0> <0> <0> | <0> | <0> <0> <0> <0> <0> <0> <0> | | | <0> # # # | <0> ********************************** 第15次操作结果************************** <0> | <0> <0> <0> <0> | <0> | <0> <0> <0> <0> <0> <0> <0> | | | <0> <0> # # | <0> ********************************** 第16次操作结果************************** <0> | <0> <0> <0> <0> | <0> | <0> <0> <0> <0> <0> <0> <0> | | | <0> <0> <0> # | <0> ********************************** 第17次操作结果************************** <0> | <0> <0> <0> <0> | <0> | <0> <0> <0> <0> <0> <0> <0> | | | <0> <0> <0> <0> | <0> **********************************
相关文章推荐
- C基础:队列性质应用广度搜索
- 深度优先搜索2-Shredding Company(算法基础 第7周)
- 【数据结构】安卓平台下深度优先搜索的应用--走迷宫
- 深度优先搜索DFS/广度优先搜索BFS的一个应用实例(华为编程大赛赛题)
- 深度搜索的应用----无向图的连通性
- 深度学习FPGA实现基础知识4(Mariana——腾讯深度学习平台的进展与应用)
- 深度优先搜索1-城堡问题(算法基础 第6周)
- 深度优先搜索1-A Knight's Journey(算法基础 第6周)
- 深度学习在搜狗无线搜索广告中的应用
- 一步一步复习数据结构和算法基础-深度优先搜索
- HDU--杭电--1716--排列2--深度优先搜索--此类中的基础题,也是水题
- 深度优先搜索的演示学习法——BlackBlank平台应用教学案例
- 深度学习在美团搜索广告排序的应用实践
- 栈与队列的应用——深度、广度优先搜索迷宫出口
- java基础知识回顾之javaIO类--File类应用:递归深度遍历文件
- Linux入职基础-5.21_搜索grep(应用实战5)
- 【计蒜客】基础算法入门之深度搜索(2)蒜头学算术d
- Android基础教程(八)之仿百度谷歌搜索自动提示框-----AutoCompleteTextView的应用
- 2.1.4 部分和问题(深度优先搜索基础)
- Android基础教程(八)之仿百度谷歌搜索自动提示框-----AutoCompleteTextView的应用