【ACM】杭电OJ 1241(深度优先搜索小结)
题目链接:杭电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(深度优先搜索小结)相关推荐
- 赛马网ACM试题(原杭电oj ACM)java版答案(1000,10001,1002)
赛马网ACM试题(原杭电OJ ACM试题)答案(java版) Author : Zhang Hailong Date : 2015-09-17 HomePage : http:// E ...
- 杭电OJ——ACM 1009.FatMouse‘ Trade
FatMouse'Trade 杭电OJ--ACM 1009.FatMouse' Trade链接入口 问题描述 肥老鼠换东西,m磅猫食,n间房子,每个房间有J[i]磅JavaBean,对应 ...
- 杭电OJ——ACM 1003.Max Sum
Max Sum 杭电OJ--ACM 1003.Max Sum链接入口 问题描述 大意: 给定一个序列a[1],a[2],a[3]-a[n],你需要算出其子序列中的最大值.比如说:给你一个 ...
- 【ACM】杭电OJ 2037
题目链接:杭电OJ 2037 先把b[i]进行排序,然后,b[i]与a[i+1]进行比较. #include <iostream> #include <cstdio> #inc ...
- 【ACM】杭电OJ 2020(排序)
题目链接:杭电OJ 2020 排序可以有冒泡排序,选择排序,或者直接调用函数. 下面是选择排序: #include <stdio.h> #include <math.h> in ...
- 【ACM】杭电OJ 2018
题目链接:杭电OJ 2018 从n>4开始,每一年的牛的数量=前一年的牛的数量+三年前的牛的数量 问:为什么是三年前? 答:假设三年前有一头小牛出生,出生的那一年即为第一年,到了第四年,即三年后 ...
- 【ACM】杭电OJ 1005
题目链接:杭电OJ 1005 超时代码如下(而且开辟的数组空间大小不够): #include <stdio.h> int m[100000]; int f(int n,int a,int ...
- 【ACM】杭电OJ 1004
题目链接:杭电OJ 1004 运行环境:Dev-C++ 5.11 思路: 先把先把num数组全部赋值为1:第一个颜色单独输入,从第二个开始,需要与前面的进行比较,如果前面有相同的颜色,则在目前的nu ...
- 【ACM】杭电OJ 2012。
题目链接:杭电OJ 2012 思路很简单,但是有一种高效算法显示编译错误,不知道为什么 运行环境:VS2017 AC代码: #include <stdio.h> #include < ...
最新文章
- Spring冲刺计划会议
- 未来10年,一类人率先失业,涉及8亿人!这8类人最安全,希望有你
- Pandas (GeoPandas)笔记:set_index reset_index
- Duilib及demo
- 非proguard无法发现jar(已编译)的外部引用错误,(javac + proguard 则会检查)
- java学习(80):GULqq界面
- 使用Spark Streaming SQL基于时间窗口进行数据统计
- centos7中yum源安装mysql_centos7下使用yum安装mysql
- java 时区处理_如何使用Java处理日历时区?
- Leo-io 的C语言实现简单五子棋游戏观后感
- SD敢达服务器源码,SD敢达全机体代码.doc
- win10怎样更改系统字体_掌阅F1系统设置及字体更改、水墨屏阅读软件、打卡必备软件...
- Tensorflow2.0 之 SSD 网络结构
- 小米手环5表盘bin文件解包修改
- 如何使谷歌浏览器的下载速度变为快速下载(例如USGS影像这类的大文件)
- Referring Image Segmentation 综述
- java计算机毕业设计html5健身房信息管理系统源码+mysql数据库+系统+lw文档+部署
- stl文件介绍及读取
- ShaderJoy —— 心形爆炸烟花效果【GLSL】
- 嵌入式软件之裸板与驱动调试