题目链接:杭电OJ 1241

深度优先搜索问题

深度优先搜索是搜索的手段之一。它从某个状态开始,不断地转移状态直到无法转移,然后回退到前一步的状态,继续转移到其他状态,如此不断重复,直至找到最终的解。

油田问题

第一种解法

#include <stdio.h>
#include <string.h>
int n,m;
int vis[110][110];
char c[110][110];void dfs(int x,int y)
{if(vis[x][y])return;  //已标记过if(x>=m||y>=n||x<0||y<0) return;  //边界条件if(c[x][y]=='@') {vis[x][y]=1;  //找到邻近的油地dfs(x+1,y);dfs(x-1,y);dfs(x,y+1);dfs(x,y-1);dfs(x-1,y-1);dfs(x+1,y+1);dfs(x-1,y+1);dfs(x+1,y-1);}}int main()
{while(~scanf("%d%d",&m,&n)){if(n==0&&m==0)return 0;int cnt=0;memset(vis,0,sizeof(vis));memset(c,0,sizeof(c));getchar();  for(int i=0;i<m;i++){for(int j=0;j<n;j++){scanf("%c",&c[i][j]);}getchar();}for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(c[i][j]=='@'&&!vis[i][j])  //未被标记过的{cnt++;dfs(i,j);}}}printf("%d\n",cnt);}return 0;
}

第二种解法

#include <stdio.h>
#include <string.h>
#define N 110
char map[N][N];
int m,n;
void dfs(int x,int y)
{map[x][y]='*';for(int dx=-1;dx<=1;dx++){for(int dy=-1;dy<=1;dy++){if(dx==0 && dy==0)continue;int nx=x+dx,ny=y+dy;if(nx>=0 && nx<m && ny>=0 && ny<n && map[nx][ny]=='@'){dfs(nx,ny);}}}
}
int main ()
{int sum;while(scanf("%d%d",&m,&n)!=EOF){if(m==0||n==0){return 0;}memset(map,0,sizeof(map));getchar();for(int i=0;i<m;i++){for(int j=0;j<n;j++){scanf("%c",&map[i][j]);}getchar();} sum=0;for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(map[i][j]=='@'){dfs(i,j);sum++;}}}printf("%d\n",sum);}return 0;
}

上面的Accepted是方法二。

【ACM】杭电OJ 1241(深度优先搜索小结)相关推荐

  1. 赛马网ACM试题(原杭电oj ACM)java版答案(1000,10001,1002)

    赛马网ACM试题(原杭电OJ ACM试题)答案(java版) Author : Zhang Hailong   Date   : 2015-09-17    HomePage : http://  E ...

  2. 杭电OJ——ACM 1009.FatMouse‘ Trade

    FatMouse'Trade 杭电OJ--ACM 1009.FatMouse' Trade链接入口 问题描述        肥老鼠换东西,m磅猫食,n间房子,每个房间有J[i]磅JavaBean,对应 ...

  3. 杭电OJ——ACM 1003.Max Sum

    Max Sum 杭电OJ--ACM 1003.Max Sum链接入口 问题描述 大意:        给定一个序列a[1],a[2],a[3]-a[n],你需要算出其子序列中的最大值.比如说:给你一个 ...

  4. 【ACM】杭电OJ 2037

    题目链接:杭电OJ 2037 先把b[i]进行排序,然后,b[i]与a[i+1]进行比较. #include <iostream> #include <cstdio> #inc ...

  5. 【ACM】杭电OJ 2020(排序)

    题目链接:杭电OJ 2020 排序可以有冒泡排序,选择排序,或者直接调用函数. 下面是选择排序: #include <stdio.h> #include <math.h> in ...

  6. 【ACM】杭电OJ 2018

    题目链接:杭电OJ 2018 从n>4开始,每一年的牛的数量=前一年的牛的数量+三年前的牛的数量 问:为什么是三年前? 答:假设三年前有一头小牛出生,出生的那一年即为第一年,到了第四年,即三年后 ...

  7. 【ACM】杭电OJ 1005

     题目链接:杭电OJ 1005 超时代码如下(而且开辟的数组空间大小不够): #include <stdio.h> int m[100000]; int f(int n,int a,int ...

  8. 【ACM】杭电OJ 1004

     题目链接:杭电OJ 1004 运行环境:Dev-C++ 5.11 思路: 先把先把num数组全部赋值为1:第一个颜色单独输入,从第二个开始,需要与前面的进行比较,如果前面有相同的颜色,则在目前的nu ...

  9. 【ACM】杭电OJ 2012。

    题目链接:杭电OJ 2012 思路很简单,但是有一种高效算法显示编译错误,不知道为什么 运行环境:VS2017 AC代码: #include <stdio.h> #include < ...

最新文章

  1. Spring冲刺计划会议
  2. 未来10年,一类人率先失业,涉及8亿人!这8类人最安全,希望有你
  3. Pandas (GeoPandas)笔记:set_index reset_index
  4. Duilib及demo
  5. 非proguard无法发现jar(已编译)的外部引用错误,(javac + proguard 则会检查)
  6. java学习(80):GULqq界面
  7. 使用Spark Streaming SQL基于时间窗口进行数据统计
  8. centos7中yum源安装mysql_centos7下使用yum安装mysql
  9. java 时区处理_如何使用Java处理日历时区?
  10. Leo-io 的C语言实现简单五子棋游戏观后感
  11. SD敢达服务器源码,SD敢达全机体代码.doc
  12. win10怎样更改系统字体_掌阅F1系统设置及字体更改、水墨屏阅读软件、打卡必备软件...
  13. Tensorflow2.0 之 SSD 网络结构
  14. 小米手环5表盘bin文件解包修改
  15. 如何使谷歌浏览器的下载速度变为快速下载(例如USGS影像这类的大文件)
  16. Referring Image Segmentation 综述
  17. java计算机毕业设计html5健身房信息管理系统源码+mysql数据库+系统+lw文档+部署
  18. stl文件介绍及读取
  19. ShaderJoy —— 心形爆炸烟花效果【GLSL】
  20. 嵌入式软件之裸板与驱动调试

热门文章

  1. 微软推出Windows XP/Server 2003紧急安全补丁:修复远程桌面CVE-2019-0708漏洞
  2. mysql干货——数据库字符集和校对规则详解
  3. 用mpvue实现的微信小程序版cnode社区
  4. linux下如何修改系统时间
  5. Java 集合 — HashMap
  6. Python取出列表相应值的位置(表处理)
  7. ubuntu安装redis的方法以及PHP安装redis扩展、CI框架sess使用redis的方法
  8. 开源代码hosting openfoundryfrom tw
  9. 2020-09-05
  10. java kryo_Kryo框架使用方法代码示例