博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1241Oil Deposits(dfs模板)
阅读量:5116 次
发布时间:2019-06-13

本文共 1560 字,大约阅读时间需要 5 分钟。

题目链接——

首先给出一个n*m的字符矩阵,‘*’表示空地,‘@’表示油井。问在这个矩阵中有多少组油井区?

每个点周围的8个点都可以与之相连。

从左上角的点开始向后枚举然后dfs搜索就可以了。记得记忆化。

 

废话说完,上代码——

 

1 #include 
2 #include
3 #include
4 #include
5 using namespace std; 6 7 const int N = 210; 8 const int M = 8; 9 10 int dis[M][2] = {
{-1, -1}, {-1, 0}, {-1, 1}, {
0, -1}, {
0, 1}, {
1, -1}, {
1, 0}, {
1, 1}}; //判断8个方向11 char mp[N][N]; //原图12 int n, m; //矩阵大小13 int ans; //结果14 15 void dfs(int x, int y) //dfs搜索函数16 {17 mp[x][y] = '*'; //当前点初处理后需要将它消掉,免得重复处理,即“记忆化”18 for(int i = 0; i < M; i++)19 {20 int mx = x+dis[i][0];21 int my = y+dis[i][1];22 if(mx >= 0 && mx < n && my >= 0 && my < m && mp[mx][my] == '@') dfs(mx, my);23 }24 }25 26 void Work() //主处理函数27 {28 for(int i = 0; i < n; i++)29 {30 for(int j = 0; j < m; j++)31 {32 if(mp[i][j] == '@')33 {34 ans++;35 dfs(i, j);36 }37 }38 }39 }40 41 void Init() //初始化函数42 {43 getchar();44 for(int i = 0; i < n; i++) scanf("%s", mp[i]);45 ans = 0;46 }47 48 void Outit() //输出函数49 {50 printf("%d\n", ans);51 }52 53 int main()54 {55 //freopen("test.in", "r", stdin);56 while(~scanf("%d%d", &n, &m) && m)57 {58 Init();59 Work();60 Outit();61 }62 return 0;63 }
View Code

 

转载于:https://www.cnblogs.com/mypride/p/5459751.html

你可能感兴趣的文章
mysql数据库死锁的产生原因及解决办法
查看>>
详解JavaScript数组过滤相同元素的5种方法
查看>>
iOS UIButton选中状态切换
查看>>
Visual Studio Code 编辑器 使用入门
查看>>
ubuntu14.04下python2.7推荐系统Crab搭建
查看>>
[翻译] LASIImageView - 显示进度指示并异步下载图片
查看>>
C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
查看>>
SpringMVC学习总结(三)——Controller接口详解(1)
查看>>
PHP 获取访问来源
查看>>
replace
查看>>
My风向标
查看>>
Flex 布局
查看>>
mvc VIEW部分介绍
查看>>
关于centos7下/etc/sysconfig/目录没有iptables问题
查看>>
充气娃娃什么感觉?Python告诉你
查看>>
MyBatis映射文件
查看>>
读书笔记--疯狂Android讲义 目录
查看>>
Linq to sql介绍及增、删、改、查
查看>>
Word两端对齐问题
查看>>
推荐系统之LFM
查看>>