POJ 3620--Avoid The Lakes【DFS】

简介: POJ 3620--Avoid The Lakes【DFS】


Avoid The Lakes

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 7059   Accepted: 3748

Description

Farmer John's farm was flooded in the most recent storm, a fact only aggravated by the information that his cows are deathly afraid of water. His insurance agency will only repay him, however, an amount depending on the size of the largest "lake" on his farm.


The farm is represented as a rectangular grid with N (1 ≤ N ≤ 100) rows and M (1 ≤ M ≤ 100) columns. Each cell in the grid is either dry or submerged, and exactly K (1 ≤ KN × M) of the cells are submerged. As one would expect, a lake has a central cell to which other cells connect by sharing a long edge (not a corner). Any cell that shares a long edge with the central cell or shares a long edge with any connected cell becomes a connected cell and is part of the lake.

Input

* Line 1: Three space-separated integers: N, M, and K

* Lines 2..K+1: Line i+1 describes one submerged location with two space separated integers that are its row and column: R and C

Output

* Line 1: The number of cells that the largest lake contains. 

Sample Input

3 4 5

3 2

2 2

3 1

2 3

1 1

Sample Output

4

Source

USACO 2007 November Bronze


题目分析:

纯粹的dfs  3 4  是3*4 的方阵  5是有5个湖       如果俩个湖临边就可以看做一个湖    

所以说问题就是让你求出以某个湖为起点看可以走多少步能走多少步就说明有多少个湖相连

输出最大的湖是多大

  hdu-1312-Red and Black

#include<cstdio>
#include<cstring>
int c,n,m,k,ans;
int map[110][110];
void dfs(int x,int y)
{
  
  if(map[x][y]) return ;  
  if(x>=1&&x<=n&&y>=1&&y<=m&&(!map[x][y]))
  {
    map[x][y]=1;
          ans++;
    dfs(x+1,y);
    dfs(x-1,y);
    dfs(x,y-1);
    dfs(x,y+1);
  }
  if(ans>c) c=ans;// 更新最大湖
}
int main()
{
  while(~scanf("%d%d%d",&n,&m,&k))
  {
    memset(map,1,sizeof(map));  //  把地图初始化为 1   1就是不能走
    int a,b;
    while(k--)
    {
      scanf("%d%d",&a,&b);
      map[a][b]=0;  //  把湖都初始化为  0   0就是能走
    }
    c=0;//  用来储存最大的湖
    for(int i=1;i<=n;i++)
    {
      for(int j=1;j<=m;j++)
      {
        if(!map[i][j])
        {
          ans=0;// 初始化步数
          dfs(i,j);  //  这里  i  j就是某个湖的位置传入dfs查他有多个相连的湖就是能走多少步和这个  hdu-1312  就一样了 
        }
          
      }
    }
    printf("%d\n",);
  }
  return 0;
}




目录
相关文章
|
10月前
|
网络协议
深入解析:TCP四次挥手断开连接的全过程及必要性
在网络通信中,TCP(传输控制协议)以其可靠性和顺序保证而闻名。然而,TCP连接的建立和终止同样重要,它们确保了网络资源的有效管理和数据传输的完整性。本文将详细描述TCP连接的四次挥手过程,并探讨为何需要四次挥手来正确终止一个TCP连接。
296 2
|
6月前
|
索引 Python
课时5:修改列表
本文介绍Python语言中修改列表元素的方法,主要包括两种操作方式:通过索引和切片修改列表。首先,使用索引可以单独修改列表中的某个元素,例如将“孙悟空”改为“sunwukong”。其次,通过切片可以批量修改多个元素,如将前两个元素替换为“牛魔王”和“红孩儿”。此外,还介绍了如何使用`del`语句删除元素以及通过切片指定范围进行删除。所有这些操作仅适用于可变序列,对于不可变序列(如字符串),需要先转换为列表才能进行修改。
|
11月前
|
C#
C# 可空类型(Nullable)
C# 单问号 ? 与 双问号 ??
172 12
|
存储 负载均衡 关系型数据库
|
测试技术 uml
UML使用问题之如何在PlantUML中表示执行者与用例之间的关联
UML使用问题之如何在PlantUML中表示执行者与用例之间的关联
|
Java 调度 开发者
Java中的多线程编程:基础知识与实践
【5月更文挑战第29天】 在现代软件开发中,多线程编程是一个不可忽视的领域。特别是在Java这种广泛使用的编程语言中,掌握多线程的概念和技术对于开发高效、响应迅速的应用程序至关重要。本文将深入探讨Java多线程的核心概念、实现机制以及常见问题的解决方案。我们将从基础出发,逐步揭示如何通过多线程提升程序性能,并且讨论并发编程中的挑战和解决策略。文章的目的是为开发者提供一个清晰的多线程编程指南,帮助他们在实际项目中有效地应用这些知识。
75 3
使用队列解决高并发下使用Client对象调用webService接口
使用队列解决高并发下使用Client对象调用webService接口
|
前端开发 JavaScript 小程序
金九银十,带你复盘大厂常问的项目难点(四)
金九银十,带你复盘大厂常问的项目难点
246 0
|
消息中间件 安全 Kafka
如何为Kafka加上账号密码(二)
本小节我们就为Kafka添加最简单的认证方式,也就是SASL_PLAINTEXT(即SASL/PLAIN+ 非加密通道)。
1447 4
|
DataWorks 对象存储 数据安全/隐私保护
dataworks多个业务流程上传同名资源到同一个oss url会有什么问题?
【1月更文挑战第20天】【1月更文挑战第98篇】dataworks多个业务流程上传同名资源到同一个oss url会有什么问题?
184 1