防御洪水【dfs深度搜索】
搜索 深度 DFS 防御 洪水
2023-09-11 14:17:47 时间
题目描述
OIBH被突来的洪水淹没了> .< 还好OIBH总部有在某些重要的地方起一些围墙,用*号表示,而一个封闭的*号区域洪水是进不去的……现在给出OIBH的围墙建设图,问OIBH总部没被淹到的重要区域(由" 0" 表示)有多少。
输入
第一行是两个数,x和y(x,y< =500) 第二行及以下是一个由*和0组成的x*y的图。
输出
输出没被水淹没的OIBH总部的“0”的数量。
样例输入
5 4
00000
00*00
0*0*0
00*00
5 5
*****
*0*0*
**0**
*0*0*
*****
输出样例
1
5
思路
首先将连通的区域进行标记,然后遍历剩余未标记累积求和。个人认为此题还是比较简单。
参考代码
#include <iostream>
#define MAX_LEN 505
using namespace std;
int n,m;
char Map[MAX_LEN][MAX_LEN];
int dir[8][2] = {{0,-1},{0,1},{-1,0},{1,0},};
void dfs(int x,int y)
{
if(x<0 || x>=n || y<0 || y>=m ||Map[x][y] == '*')
{
return ;
}
if(Map[x][y] == '0')
{
Map[x][y] = '*';//标记
}
for(int i=0;i<4;i++)//继续从其他方向搜索
{
dfs(x+dir[i][0],y+dir[i][1]);
}
return ;
}
int main()
{
while(cin>>m>>n)
{
for(int i=0;i<n;i++)
{
cin>>Map[i];
}
int count = 0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if((i==0||i==n-1||j==0||j==m-1) && Map[i][j] == '0')
{
dfs(i,j);
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(Map[i][j] == '0')
{
count++;
}
}
}
cout<<count<<endl;
}
return 0;
}
相关文章
- 百度地图API地点搜索-获取经纬度
- destoon8.0热门搜索聚合页面生成
- Java实现 LeetCode 235 二叉搜索树的最近公共祖先
- Java实现 LeetCode 212 单词搜索 II(二)
- Java实现 LeetCode 79 单词搜索
- IDEA 全局搜索选择后不关闭当前窗口
- 第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门搜索
- 【二分】LeetCode 33. 搜索旋转排序数组【中等】
- 数据结构与算法之美-11 图 深度和广度优先搜索 [MD]
- github搜索技巧:搜索star数量大于10000的Java项目
- H7-TOOL发布V2.10, RTT增加搜索范围, 脱机烧录增加华大, 雅特力, 航顺,复旦微和nRF51新型号, 一键下载, HEX分段等(2021-12-29)
- 基于混沌原子搜索优化的电力系统(HPS)负载频率自动控制(ALFC)(Matlab代码实现)
- 具有随机分形自适应搜索策略的蚁狮优化算法-附代码
- 面试题 08.08. 有重复字符串的排列组合-快速排序+回溯深度优先搜索
- 1932. 合并多棵二叉搜索树-哈希法+深度优先遍历
- 559. N 叉树的最大深度-深度优先搜索
- 百度搜索的使用技巧
- 深度学习在美团搜索广告排序的应用实践
- [Elasticsearch] 多字段搜索 (二) - 最佳字段查询及其调优(转)
- 【深度学习与计算机视觉】6、图像分类与搜索
- python elasticsearch 入门教程(二) ---全文搜索