POJ3620
2015-07-20 21:57
363 查看
Avoid The Lakes
DescriptionFarmer 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 hisfarm.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 ≤ K ≤ N × M) of thecells 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 connectedcell 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 COutput* Line 1: The number of cells that the largest lake contains. Sample Input
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 6697 | Accepted: 3595 |
3 4 5 3 2 2 2 3 1 2 3 1 1Sample Output
4
这道题其实直接用深度搜索就可以解决,以下是我的代码:
#include<iostream>#include<cstdio>#include<memory.h>#define max(a,b) ((a>b)?(a):(b))using namespace std;const int Max=101;int MAX,Num;int a[Max][Max],d[Max][Max];int N,M,K;int exam(int x,int y){int X[2]={-1,1};int Y[2]={-1,1};for(int j=0;j<2;j++){if(d[x][y+Y[j]]==0&&a[x][y+Y[j]]==1){d[x][y+Y[j]]=1;Num++;exam(x,y+Y[j]);}}for(int j=0;j<2;j++){if(d[x+X[j]][y]==0&&a[x+X[j]][y]==1){d[x+X[j]][y]=1;Num++;exam(x+X[j],y);}}return 0;}int main(){int b[Max],c[Max];while(scanf("%d%d%d",&N,&M,&K)!=EOF){memset(a,0,sizeof(a));memset(d,0,sizeof(d));MAX=0;for(int i=0;i<K;i++){int m,n;scanf("%d%d",&m,&n);b[i]=m-1;c[i]=n-1;a[m-1][n-1]=1;}for(int j=0;j<K;j++){Num=1;d[b[j]][c[j]]=1;exam(b[j],c[j]);MAX=max(MAX,Num);memset(d,0,sizeof(d));}printf("%d\n",MAX);}return 0;}
不同于一般的深度搜索,这里我采用的是全局变量来存储符合条件的点的个数,并且用了同样大的数组来存储每次选点的情况,可能相比其他的解题方法来说要麻烦一点。
在这个程序中其实还有点问题,如果大家看出来了请给我留言,谢谢。
相关文章推荐
- extern "C"
- linux学习笔记1
- Hadoop+HBase+ZooKeeper分布式集群环境搭建
- Android混淆之ProGuard
- Hadoop+HBase+ZooKeeper分布式集群环境搭建
- HTML基础标签
- 一步一步学习多线程编程之线程同步通信
- 【MFC-5】VS2010编程之文件对话框
- 35. Search Insert Position
- FileZilla Server安装配置教程
- linux-挂载数据
- C#的变量以及类型转换
- hdu 1257 最少拦截系统 dp
- Ruby Programming
- csu 1101
- [leedcode 104] Maximum Depth of Binary Tree
- 算法学习之java实现快速排序
- NOI2001方程的解数 (DFS技巧:meet in the middle)(非哈希)
- 十大大数据分析
- UIScrollView实现不全屏分页的小技巧