#问题求解与编程# 实验三 G小蝌蚪安家
小蝌蚪安家
发布时间: 2018年4月2日 20:48 时间限制: 1000ms 内存限制: 128M
在一个矩形区域内,有些地方有水,有些地方没水。所有相邻的有水的地方会共同组成一个水洼,小蝌蚪想在这块区域中找到一个最大的水洼来安家。
有多组输入数据,每组第一行包含两个正整数n,m(n,m<=100),接下来n行,每行m个字符,“.”表示有水,“#”表示没水。
对于每组输入数据输出一行,包含一个整数,表示最大的水洼的面积。
3 3 ### ### ##. 2 3 #.. ..#
1 4
———————————————————————————————————————————————————非常标准的一道DFS题目 相当有温习的价值和必要
#include<iostream>
#include<string.h>
#include<cmath>
#include <cstdio>
using namespace std;char map[110][110];
int v[110][110];
int temp,n,m;
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int main()
{void dfs(int i,int j);int i,j;while(scanf("%d%d",&n,&m)!=EOF){int Max=0;memset(v,0,sizeof(v));for(i=0;i<n;i++)for(j=0;j<m;j++)cin>>map[i][j];//输入地图for(i=0;i<n;i++){for(j=0;j<m;j++){if(map[i][j]=='.'&&v[i][j]==0)//对每一块区域都进行DFS搜索{temp=0;//area每次重新走的时候都要重置为0dfs(i,j);Max=max(Max,temp);} //保留其中的最大值}}cout<<Max<<endl;} return 0;
}
void dfs(int i,int j)
{if(i<0||j<0||i>=n||j>=m||v[i][j])return;//超出范围则returnv[i][j]=1;//标记访问过后的路径temp++;//for(int k=0;k<4;k++){int x=i+dir[k][0];int y=j+dir[k][1];if(x<0||x>=n||y<0||y>=m)continue;if(v[x][y]==0&&map[x][y]=='.') dfs(x,y); }
}
DFS问题常封装好DFS函数来解决,关键在于判断DFS搜索的方向和范围。关于方向 通常设置一个dir函数会更加简单一点;直接调用其对应的方向就好。
下面是标程:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n,m,posn;
int vis[110][110];//标记走过的点,0表示没走过,1表示走过
char maps[110][110];//存这个区域
int dir[4][2]={1,0,-1,0,0,1,0,-1};//四个方向
void dfs(int i,int j)
{if(i<0||i>=n||j<0||j>=m)//筛去不合法的路径return ;if(vis[i][j]||maps[i][j]=='#')//如果这个点走过,或者这个点是'#',也不用走了return ;posn++;vis[i][j]=1;//面积pos已经自加1了,所以该点也就可以标记走过了for(int k=0;k<4;k++)//往四个方向走dfs(i+dir[k][0],j+dir[k][1]);
}
int main()
{//freopen("data.in","r",stdin);while(scanf("%d%d",&n,&m)!=EOF){int i,j,maxn=0;memset(vis,0,sizeof(vis));for(i=0;i<n;i++)scanf("%s",maps[i]);for(i=0;i<n;i++)for(j=0;j<m;j++){if(maps[i][j]=='.'&&(!vis[i][j]))//如果是水洼'.'并且这个水洼点'.'没有被计算过,则从这个点开始dfs{posn=0;//posn存的是每块水洼的面积,每块计算的时候需要重置为0dfs(i,j);maxn=max(maxn,posn);}}printf("%d\n",maxn);}return 0;
}
#问题求解与编程# 实验三 G小蝌蚪安家相关推荐
- 北邮数电实验三接球小游戏
文章目录 前言 一.实验要求 二.设计思路 三.设计系统框图 四.源代码 五.遇到的问题和解决办法 六.总结 前言 北邮数电实验三"接球小游戏" 数电实验验收已经结束了,实验报告也 ...
- bjfu1143 小蝌蚪安家 解题报告
搜索没判断重复 导致各种bug 广搜栈空间超了 深搜有调试了半天 真的无语了 记录一下 校内放了链接校外也访问不了 直接放题目 用visit数组记录是否出现在队列里面 数据结构学好 并且做的题目少的可 ...
- dsa数字签名c语言编程,实验三DSA数字签名算法
<实验三DSA数字签名算法>由会员分享,可在线阅读,更多相关<实验三DSA数字签名算法(8页珍藏版)>请在人人文库网上搜索. 1.实验三 DSA数字签名算法姓 名: 学 号: ...
- ACM 小蝌蚪安家 简单DFS
描述 在一个矩形区域内,有些地方有水,有些地方没水.所有相邻的有水的地方会共同组成一个水洼,小蝌蚪想在这块区域中找到一个最大的水洼来安家. 输入 有多组输入数据,每组第一行包含两个正整数n,m(n,m ...
- bjfu 1143 小蝌蚪安家(bfs入门)
本人的第一题bfs搜索: 在一个矩形区域内,有些地方有水,有些地方没水.所有相邻的有水的地方会共同组成一个水洼,小蝌蚪想在这块区域中找到一个最大的水洼来安家. Input 有多组输入数据,每组第一行包 ...
- 小蝌蚪安家 bjfu 1143 广度优先遍历
描述 在一个矩形区域内,有些地方有水,有些地方没水.所有相邻的有水的地方会共同组成一个水洼,小蝌蚪想在这块区域中找到一个最大的水洼来安家. 输入 有多组输入数据,每组第一行包含两个正整数n,m(n,m ...
- #问题求解与编程# 实验二 D 比赛排名预测
比赛排名预测 发布时间: 2018年3月27日 09:17 最后更新: 2018年3月29日 20:13 时间限制: 1000ms 内存限制: 128M 描述 听说ACM爱好者协会即将举办 ...
- #问题求解与方程# 实验三 F 数据结构之栈的应用
数据结构之栈的应用 发布时间: 2018年4月2日 20:47 时间限制: 1000ms 内存限制: 128M 描述 对于每一位学计算机的孩纸来说,数据结构(Data Structure)无疑 ...
- 西北工业大学#面向对象编程实验#实验三
西北工业大学·面向对象编程实验三 3.1 题目说明:给定Project类,在ProjectArray中实现缺失功能,并在测试类TestProjectArray中运行成功显示"All test ...
最新文章
- 面包好吃却五毒俱全,吃前请三思!
- Kubernetes系统架构简介--转
- Glide核心设计一:皮皮虾,我们走
- when is Lessifier triggered to be loaded
- 听我讲完GET、POST原理,面试官给我倒了杯卡布奇诺
- MySQL在Docker环境下运行基础
- 深入C++面试题总结
- 更新字典 (Updating a Dictionary,UVa12504)
- Ubuntu 18.04安装
- 关于【CSDN免积分下载器】的分析
- 上传航测影像就能土方计算?!0基础倾斜摄影土方计算流程
- php mtrand 范围,PHP mt_rand()函数
- excle报盘之导出处理失败数据
- 华为鸿蒙是开源式系统,全面开源!华为自研操作系统鸿蒙正式亮相
- 创建OE Order报Pre_Write_Process错误
- 求质数(素数)算法,及算法优化
- linux jenkins部署脚本,使用Jenkins 自动部署发布
- 广州的11个辖区_广东省广州市有哪些区?
- 【CSDN编程竞赛】赛后总结
- 我的世界手机版javaui材质包_我的世界:感受国外顶级3D材质包CreatorCraft
热门文章
- 【数据分析案例】某瓣读书数据分析
- Android开发之如何在App间安全地共享文件(FileProvider详解)?
- 好文转载——38K红外遥控编码扫盲
- 02-SpringBoot工程中JDBC应用实践
- 3.1 相关系数(person与spearman)
- JS中this的指向
- Java -jar xxx.jar --server.port=xxx 端口不生效问题
- 2020年计算机视觉市场现状与竞争格局分析,集成化、小型化的产品将会成为主要发展方向之一「图」
- PCIe热插拔机制(详细)总结-PCIe专题知识(五)
- 《RFID原理及应用》期末复习总结