DFS & BFS
DFS 深度优先
BFS 广度优先
DFS或者BFS都是在联通区域内遍历节点的方法
用在二叉树上DFS有preOreder,inOrder,postOrder,BFS就是层次遍历。
在二叉树上的节点,只有两个选择,left 和right,即,对于每一个节点,in 有1个, out 有两个,有向图
在矩阵的节点上,有四个选择,up、down、left和right四种选择,即,即,对于每一个节点,in 有4个, out 有4个,有向图
在surrounded Regions 中可以使用DFS或者BFS来解决问题
下面以4x4 矩阵为例,说明DFS和BFS的工作过程
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
using namespace std; void printArray(int *array, int size)
{
for(int i = ; i < size; i++)
cout << array[i]<< "\t" ;
cout << endl;
} void printVector(vector<char> array )
{
for(int i = ; i <array.size(); i++)
cout << array[i]<< "\t" ;
cout << endl;
} void printVector(vector<int> array )
{
for(int i = ; i <array.size(); i++)
cout << array[i]<< "\t" ;
cout << endl;
} class Solution {
queue<pair<int, int> > m_que;
public:
void dfs(vector<vector<int> > &board, int i, int j)
{
size_t row = board.size();
size_t col = board[].size(); if(i < || i > row- || j < || j > col-)
return;
if( board[i][j] == INT_MAX)
return;
cout << "(" << i <<"," << j << ") = " << board[i][j] << endl ;
board[i][j] = INT_MAX;//tag, in order to reverse back
dfs(board, i, j-);
dfs(board, i, j+);
dfs(board, i-, j);
dfs(board, i+, j);
} void fill(vector<vector<int> > &board, int i, int j){
size_t row = board.size();
size_t col = board[].size(); if(i< || i>=row || j< || j>=col || board[i][j]== INT_MAX)
return; pair<int, int> p ;
p.first = i;
p.second = j;
m_que.push(p); cout << "(" << i <<"," << j << ") = " << board[i][j] << endl ;
board[i][j]= INT_MAX; } void bfs(vector<vector<int> > &board, int i, int j)
{
fill(board, i, j); while(!m_que.empty())
{
pair<int, int> p = m_que.front() ;
m_que.pop(); i = p.first;
j = p.second; fill(board, i, j-);
fill(board, i, j+);
fill(board, i-, j);
fill(board, i+, j);
} } void dfs(vector<vector<int> > board)
{
if (board.empty()) return; dfs(board, ,); }
void bfs(vector<vector<int> > board)
{
if (board.empty()) return; bfs(board, ,); }
}; int main()
{
vector<vector<int> > board;
vector<int> a;
a.resize(, ); a[] = ;
a[] = ;
a[] = ;
a[] = ;
board.push_back(a); a[] = ;
a[] = ;
a[] = ;
a[] = ;
board.push_back(a); a[] = ;
a[] = ;
a[] = ;
a[] = ;
board.push_back(a); a[] = ;
a[] = ;
a[] = ;
a[] = ;
board.push_back(a); // board.clear();
Solution sl; for(int i = ; i < board.size(); i++)
printVector(board[i]); cout <<endl;
cout << "dfs" <<endl;
sl.dfs(board);
cout << "bfs" <<endl;
sl.bfs(board); for(int i = ; i < board.size(); i++)
printVector(board[i]); return ;
}
打印结果
[root@localhost surroundedRegions]# ./a.out
矩阵
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
dfs
(2,2) = 10
(2,1) = 9
(2,0) = 8
(1,0) = 4
(1,1) = 5
(1,2) = 6
(1,3) = 7
(0,3) = 3
(0,2) = 2
(0,1) = 1
(0,0) = 0
(2,3) = 11
(3,3) = 15
(3,2) = 14
(3,1) = 13
(3,0) = 12
bfs
(2,2) = 10
(2,1) = 9
(2,3) = 11
(1,2) = 6
(3,2) = 14
(2,0) = 8
(1,1) = 5
(3,1) = 13
(1,3) = 7
(3,3) = 15
(0,2) = 2
(1,0) = 4
(3,0) = 12
(0,1) = 1
(0,3) = 3
(0,0) = 0
DFS & BFS的更多相关文章
- DFS/BFS+思维 HDOJ 5325 Crazy Bobo
题目传送门 /* 题意:给一个树,节点上有权值,问最多能找出多少个点满足在树上是连通的并且按照权值排序后相邻的点 在树上的路径权值都小于这两个点 DFS/BFS+思维:按照权值的大小,从小的到大的连有 ...
- 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)
[题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因 ...
- ID(dfs+bfs)-hdu-4127-Flood-it!
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4127 题目意思: 给n*n的方格,每个格子有一种颜色(0~5),每次可以选择一种颜色,使得和左上角相 ...
- [LeetCode] 130. Surrounded Regions_Medium tag: DFS/BFS
Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'. A reg ...
- HDU 4771 (DFS+BFS)
Problem Description Harry Potter has some precious. For example, his invisible robe, his wand and hi ...
- DFS/BFS视频讲解
视频链接:https://www.bilibili.com/video/av12019553?share_medium=android&share_source=qq&bbid=XZ7 ...
- POJ 3083 -- Children of the Candy Corn(DFS+BFS)TLE
POJ 3083 -- Children of the Candy Corn(DFS+BFS) 题意: 给定一个迷宫,S是起点,E是终点,#是墙不可走,.可以走 1)先输出左转优先时,从S到E的步数 ...
- [LeetCode]695. 岛屿的最大面积(DFS/BFS)、200. 岛屿数量(DFS/BFS待做/并差集待做)
695. 岛屿的最大面积 题目 给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合.你可以假设二维矩阵的四个边缘都被 ...
- POJ2308连连看dfs+bfs+优化
DFS+BFS+MAP+剪枝 题意: 就是给你一个10*10的连连看状态,然后问你最后能不能全部消没? 思路: 首先要明确这是一个搜索题目,还有就是关键的一点就是连连看这个游戏是 ...
- ACM/ICPC 之 靠墙走-DFS+BFS(POJ3083)
//POJ3083 //DFS求靠左墙(右墙)走的路径长+BFS求最短路 //Time:0Ms Memory:716K #include<iostream> #include<cst ...
随机推荐
- python 控制 cmd 命令行颜色
基于win7 + python3.4 import ctypes import sys '''Windows CMD命令行颜色''' # 句柄号 STD_INPUT_HANDLE = -10 STD_ ...
- 20135220谈愈敏Linux_总结
Linux_总结 具体博客链接 计算机是如何工作的 操作系统是如何工作的 构造一个简单的Linux系统MenuOS 系统调用(上) 系统调用(下) 进程的描述和创建 可执行程序的装载 进程的切换和系统 ...
- WiFi QC 自动测试:Qt控制无线路由器
在测试wifi的时候,测试人员一般要使用很多不同型号的AP,并且需要不断地切换Chariot的配置. 这里的思路是致力于提供一个友好的GUI界面来自动控制AP,并且自动控制Chariot进行Throu ...
- 20145215《Java程序设计》第5周学习总结
20145215<Java程序设计>第五周学习总结 教材学习内容总结 异常处理 语法与继承架构 异常就是程序在运行时出现不正常情况,异常的由来是因为Java把出现的问题封装成了对象,换句话 ...
- CocoaPods Podfile 文件写法有讲究
最近做到一些项目想到用 OC/Swift混编的问题.为了搞懂 bridge header 这个文件是咋个情况.却一致报错.最后不知不觉发现问题问题居然出在 Podfile 上. 开始我是从 IT 江湖 ...
- 微信小程序内测申请
想申请微信小程序的内测?别做梦了! 小程序内测是邀请制的,目前就发放了200个内测邀请.正因为稀缺,江湖传言内测资格已经炒到300万(一套房)一个了 但是!!!!你可以先熟悉一下相关资料和文档,下载一 ...
- (旧)子数涵数·PS——冷色调与LOMO
一.准备素材(我是从百度图库里下载的) 二.打开PS和素材 三.复制图层,快捷键Ctrl+J,并把原图层隐藏,只在副本上编辑(好习惯) 四.使用"匹配颜色"命令,增加"明 ...
- 深入理解jQuery中$.get、$.post、$.getJSON和$.ajax的用法
当我们用javascript写ajax程序写得很“开心”的时候,突然有人告诉你有一种东西叫jquery,它会告诉你不直接和HttpRequest是多么的快乐,同时你再也不需要再烦恼纠结的ajax乱码问 ...
- java中的File类
File类 java中的File类其实和文件并没有多大关系,它更像一个对文件路径描述的类.它即可以代表某个路径下的特定文件,也可以用来表示该路径的下的所有文件,所以我们不要被它的表象所迷惑.对文件的真 ...
- 大型网站系统架构实践(五)深入探讨web应用高可用方案
从上篇文章到这篇文章,中间用了一段时间准备,主要是想把东西讲透,同时希望大家给与一些批评和建议,这样我才能有所进步,也希望喜欢我文章的朋友,给个赞,这样我才能更有激情,呵呵. 由于本篇要写的内容有点多 ...