ACM-搜索 聪会长的关爱:dfs计算最大八方联通块的面积

2024-06-07 15:18

本文主要是介绍ACM-搜索 聪会长的关爱:dfs计算最大八方联通块的面积,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意:和紫书162页的油田意思差不多,只是这里不是求联通块的块数,而是找最大块,并计数最大块的面积。

输入:多组输入。 每组第一行输入两个数m和n (n,m范围0~1000),表示教室的大小,有m行n列的座位。当m和n为0时停止程序。 输入一个教室的人员分布图,用一个矩阵表示,其中“@”表示小姐姐,“*”表示丑陋的男人。

5 5
****@
*@@*@
*@**@
@@@*@
@@**@
4 4
****
*@@*
*@**
****
2 8
*@@@@@@@
*****@@@
0 0

输出:每组输出一行一个数字,表示聪聪最多能撩到的小姐姐数量。

8
3
10

太……久没写搜索,我都不会写了,之前写了一个,但是一直出现意外错误,好想哭……
思路:这里就是暴力一个个搜过去,我的思路有以下几个注意:
1.八方处理:用fx[8],fy[8]匹配来试探八个方向的可能性。
2.没有用vis[1005][1005,而是直接在map上面修改地图,即搜过的点@直接换成*,这样可以避免重复搜,陷入死循。
3.一开始写错就是因为判断条件的位置放错了,用成了回溯的板子…..而且没注意好枚举八方时的dfs调用判断。

错误代码如下!!!!不要抄,知道是错的就好

//八个方向遍历,会有反复进行相互遍历的取向,会死循 
void dfs(int x,int y){if(end(x,y))return;//结束判断 else for(int i=0;i<8;i++){int xx=x+fx[i],yy=y+fy[i]; if(map[xx][yy]=='@'){map[xx][yy]=='*';dfs(xx,yy);}}
} 

1.预处理,分配空间

int m,n,i,j;
int fx[8]= {-1,1,0,0,1,-1,-1,1};
int fy[8]= {0,0,-1,1,-1,-1,1,1};
char map[1005][1005];

2.重点!!!dfs

int dfs(int x,int y){//if(x<0||x>=n||y<0||y>=m)return 0;//结束判断 //if(map[x][y]!='@')return 0;//结束判断//处理 map[x][y]='*';int sum=1;for(int i=0;i<8;i++){int xx=x+fx[i],yy=y+fy[i];if(map[xx][yy]=='@'&&xx<n&&xx>=0&&yy<m&&yy>=0){//即进入dfs的位置一定是可行的@//vis[xx][yy]=1;sum+=dfs(xx,yy);}}return sum;
} 

3.主函数调用处理最大值更新

int main()
{//freopen("3.txt","r",stdin);while(cin>>n>>m&&n&&m)//n行m列 {for(i=0;i<n;i++){scanf("%s",map[i]);}int cnt=0;for(i=0;i<n;i++){for(j=0;j<m;j++){if(map[i][j]=='@'){ cnt=max(cnt,dfs(i,j));//更新最大面积}       }}cout<<cnt<<endl;}return 0;
}

敲黑板!!!紫书162页!!!
新生写博客,如有错误,欢迎留言指正!笔芯哦~

这篇关于ACM-搜索 聪会长的关爱:dfs计算最大八方联通块的面积的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1039542

相关文章

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

如何提高Redis服务器的最大打开文件数限制

《如何提高Redis服务器的最大打开文件数限制》文章讨论了如何提高Redis服务器的最大打开文件数限制,以支持高并发服务,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录如何提高Redis服务器的最大打开文件数限制问题诊断解决步骤1. 修改系统级别的限制2. 为Redis进程特别设置限制

C# ComboBox下拉框实现搜索方式

《C#ComboBox下拉框实现搜索方式》文章介绍了如何在加载窗口时实现一个功能,并在ComboBox下拉框中添加键盘事件以实现搜索功能,由于数据不方便公开,作者表示理解并希望得到大家的指教... 目录C# ComboBox下拉框实现搜索步骤一步骤二步骤三总结C# ComboBox下拉框实现搜索步骤一这

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

hdu 2489 (dfs枚举 + prim)

题意: 对于一棵顶点和边都有权值的树,使用下面的等式来计算Ratio 给定一个n 个顶点的完全图及它所有顶点和边的权值,找到一个该图含有m 个顶点的子图,并且让这个子图的Ratio 值在所有m 个顶点的树中最小。 解析: 因为数据量不大,先用dfs枚举搭配出m个子节点,算出点和,然后套个prim算出边和,每次比较大小即可。 dfs没有写好,A的老泪纵横。 错在把index在d

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc