深度搜索应用之黑白图像(非递归)
2014-05-22 16:10
162 查看
深度搜索应用之黑白图像(非递归)
前言:
使用深度搜索,有两个方法:递归,栈。本质是栈。
递归有一个缺陷,栈溢出。栈有一个缺陷,程序相对递归更复杂。
练习题:
输入一个n*n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数。如果两个黑格子有公共边或者公共顶点,就说它们属于同一个八连块。(题意是让求连在一起的块有几个,图见书本)
使用递归求解:点这里
使用栈求解:
参考资料:点这里
前言:
使用深度搜索,有两个方法:递归,栈。本质是栈。
递归有一个缺陷,栈溢出。栈有一个缺陷,程序相对递归更复杂。
练习题:
输入一个n*n的黑白图像(1表示黑色,0表示白色),任务是统计其中八连块的个数。如果两个黑格子有公共边或者公共顶点,就说它们属于同一个八连块。(题意是让求连在一起的块有几个,图见书本)
使用递归求解:点这里
使用栈求解:
#include <iostream> #include <memory.h> #include <stack> using namespace std; const int MAXN=8; typedef struct { int x; int y; } node; stack<node> stack_temp; node node_temp; void push_value(int x,int y) { node_temp.x=x; node_temp.y=y; stack_temp.push(node_temp); } int mat[MAXN][MAXN]= {0,0,0,0,0,0,0,0, 0,1,0,0,1,0,0,0, 0,0,0,1,0,1,0,0, 0,0,0,0,0,0,0,0, 0,1,1,0,0,0,0,0, 0,1,1,1,0,0,0,0, 0,0,1,0,1,0,0,0, 0,0,0,0,0,0,0,0 },vist[MAXN][MAXN]= {0}; void dfs(int x,int y) { push_value(x,y); vist[x][y]=1; bool flag_break=false; bool flag_for_over=false; while(!stack_temp.empty()) { int temp_x=stack_temp.top().x,temp_y=stack_temp.top().y; /**< 对周围的8个结点进行遍历 */ for(int i=temp_x-1,last_x = temp_x+1; i<=last_x; ++i) { for(int j=temp_y-1,last_y = temp_y+1; j<=last_y; ++j) { if(mat[i][j]&&!vist[i][j]) { cout<<"("<<i<<","<<j<<")"<<endl; vist[i][j]=1; push_value(i,j); flag_break=true; break; } } /**< 用于标志一个有效结点,方便对下周围的结点进行遍历 */ if(flag_break) { flag_break=false; break; } /**< 用于标志一个for循环是否结束,用于判断出栈的标志 */ if(i>=last_x) { flag_for_over=true; break; } } /**< 若一个循环结束,则踢出一个结点 */ if(flag_for_over) { stack_temp.pop(); flag_for_over=false; } } return ; } int main() { int count_=0; memset(vist,0,sizeof(vist)); for(int i=1; i<=6; ++i) { for(int j=1; j<=6; ++j) { if(mat[i][j] && !vist[i][j]) { ++count_; dfs(i,j); } } } cout<<count_<<endl; return 0; }
参考资料:点这里
相关文章推荐
- NOJ1102黑白图像——深度搜索DFS
- 深度搜索递归和非递归
- 深度优先搜索应用_深度优先生成树&&割点判断
- 二叉树的深度(前序 中序 后序 递归非递归搜素)、广度、搜索 C++
- 深度优先搜索入门:POJ1164城堡问题(递归、用栈模拟递归)
- C语言对深度搜索的简单应用(Oil Deposits
- (转载)菜鸟拼杀ZOJ心得:[ZZ]递归深度优先搜索
- 深度搜索的应用----无向图的连通性
- java基础知识回顾之javaIO类--File类应用:递归深度遍历文件
- 深度学习在图像识别中的应用--学习笔记1
- hdu 2553 N皇后问题(深度递归搜索)
- DFS深度优先搜索结合剪枝的应用
- C++图像处理 -- 图像黑白调整应用
- 【CSWS2014 Summer School】深度问答技术及其在搜索中的应用-马艳军
- 求解:栈的应用 深度优先搜索:迷宫问题
- C++图像处理 -- 图像黑白调整应用
- C++图像处理 -- 图像黑白调整应用
- DFS (深度搜索) 简单应用 ---- 分解因子
- 深度优先搜索DFS( 递归+非递归)
- 深度学习在图像识别中的应用--学习笔记2