Farm Irrigation


Time Limit: 2 Seconds      Memory Limit: 65536 KB

Benny has a spacious farm land to irrigate. The farm land is a rectangle, and is divided into a lot of samll squares. Water pipes are placed in these squares. Different square has a different type of pipe. There are 11 types of pipes, which is marked from A to K, as Figure 1 shows.


Figure 1

Benny has a map of his farm, which is an array of marks denoting the distribution of water pipes over the whole farm. For example, if he has a map

ADC
FJK
IHE

then the water pipes are distributed like


Figure 2

Several wellsprings are found in the center of some squares, so water can flow along the pipes from one square to another. If water flow crosses one square, the whole farm land in this square is irrigated and will have a good harvest in autumn.

Now Benny wants to know at least how many wellsprings should be found to have the whole farm land irrigated. Can you help him?

Note: In the above example, at least 3 wellsprings are needed, as those red points in Figure 2 show.

Input

There are several test cases! In each test case, the first line contains 2 integers M and N, then M lines follow. In each of these lines, there are N characters, in the range of 'A' to 'K', denoting the type of water pipe over the corresponding square. A negative M or N denotes the end of input, else you can assume 1 <= M, N <= 50.

Output

For each test case, output in one line the least number of wellsprings needed.

Sample Input

2 2
DK
HF 3 3
ADC
FJK
IHE -1 -1

Sample Output

2
3 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2412



简单的dfs搜索,主要就是构图,将水管状态变为数组状态,可以将水管类型字母转化成3*3的方阵。

0,1,0,      0,1,0,  0,0,0,   0,0,0,   0,1,0,  0,0,0,   0,1,0,   0,1,0,   0,0,0,   0,1,0,   0,1,0,

1,1,0,      0,1,1,    1,1,0,    0,1,1,   0,1,0,  1,1,1,   1,1,1,   1,1,0,   1,1,1,   0,1,1,   1,1,1,

0,0,0,      0,0,0,    0,1,0,    0,1,0,   0,1,0,  0,0,0,   0,0,0,   0,1,0,   0,1,0,   0,1,0,    0,1,0

A     B       C     D     E    F      G      H      I     J      K

构图成功后就是简单的dfs。类似题目有HDOJ1241,HDOJ1312,POJ1562,POJ2386,POJ1979



#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m;
int farm[155][155];
int dir[4][2]= {{1,0},{0,1},{-1,0},{0,-1}};
int x[11][9]=
{
0,1,0,1,1,0,0,0,0,
0,1,0,0,1,1,0,0,0,
0,0,0,1,1,0,0,1,0,
0,0,0,0,1,1,0,1,0,
0,1,0,0,1,0,0,1,0,
0,0,0,1,1,1,0,0,0,
0,1,0,1,1,1,0,0,0,
0,1,0,1,1,0,0,1,0,
0,0,0,1,1,1,0,1,0,
0,1,0,0,1,1,0,1,0,
0,1,0,1,1,1,0,1,0
};
void build(char c,int signi,int signj);
void dfs(int x,int y);
int main()
{
int i,j;
char c;
while(scanf("%d%d",&n,&m)&&n>=0&&m>=0)
{
getchar();
memset(farm,0,sizeof(farm));
for(i=1; i<n*3-1; i+=3)
{
for(j=1; j<m*3-1; j+=3)
{
scanf("%c",&c);
build(c,i,j);
//cout<<i<<" "<<j<<endl;
}
getchar();
}
/*
cout<<endl;
for(i=0; i<n*3; i++)
{
for(j=0; j<m*3; j++)
printf("%d",farm[i][j]);
printf("\n");
}
cout<<endl;
*/
int sum=0;
for(i=0; i<n*3; i++)
for(j=0; j<m*3; j++)
if(farm[i][j]==1)
{
farm[i][j]=0;
sum++;
dfs(i,j);
}
cout<<sum<<endl;
}
return 0;
}
void build(char c,int signi,int signj)
{
int i,j;
int k,t=0;
k=c-65;
for(i=signi-1; i<=signi+1; i++)
{
for(j=signj-1; j<=signj+1; j++)
{
farm[i][j]=x[k][t++];
//printf("%d",farm[i][j]);
}
//printf("\n");
}
}
void dfs(int x,int y)
{
int i,fx,fy;
for(i=0; i<4; i++)
{
fx=x+dir[i][0];
fy=y+dir[i][1];
if(fx>=0&&fx<n*3&&fy>=0&&fy<m*3&&farm[fx][fy]==1)
{
farm[fx][fy]=0;
dfs(fx,fy);
}
}
}

  

ZOJ2412 Farm Irrigation(农田灌溉) 搜索的更多相关文章

  1. ZOJ 2412 Farm Irrigation

    Farm Irrigation Time Limit: 2 Seconds      Memory Limit: 65536 KB Benny has a spacious farm land to ...

  2. ZOJ 2412 Farm Irrigation(DFS 条件通讯块)

    意甲冠军  两个农田管内可直接连接到壳体  他们将能够共享一个水源   有11种农田  管道的位置高于一定  一个农田矩阵  问至少须要多少水源 DFS的连通块问题  两个相邻农田的管道能够直接连接的 ...

  3. HDUOJ--------(1198)Farm Irrigation

    Farm Irrigation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  4. HDU 1198 Farm Irrigation(并查集,自己构造连通条件或者dfs)

    Farm Irrigation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  5. hdu.1198.Farm Irrigation(dfs +放大建图)

    Farm Irrigation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  6. HDU1198水管并查集Farm Irrigation

    Benny has a spacious farm land to irrigate. The farm land is a rectangle, and is divided into a lot ...

  7. HDU 1198 Farm Irrigation (并检查集合 和 dfs两种实现)

    Farm Irrigation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  8. 【简单并查集】Farm Irrigation

    Farm Irrigation Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Tot ...

  9. Farm Irrigation

    题目:Farm Irrigation 题目链接:http://210.34.193.66:8080/vj/Problem.jsp?pid=1494 题目思路:并查集 #include<stdio ...

随机推荐

  1. Redux DevTools浏览器插件调试redux

    与redux的Devtools模块不同,该工具主要依赖浏览器插件完成.模式也比Devtools简单点. redux-devtools 是一个非常棒的工具,它可以让你实时的监控Redux的状态树的Sto ...

  2. cxf 例子

    使用 CXF 做 webservice 简单例子     Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构.它允许创建高性能和可扩展的服务,您可以将这 ...

  3. 解决python3.6的UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 28613: illegal multibyte sequence

    这是python3.6的print()函数自身有限制,不能完全打印所有的unicode字符. 主要的是windows下python的默认编码不是'utf-8',改一下python的默认编码成'utf- ...

  4. Error:svn: E160013 svn主干切换分支时报错

    Error:svn: E160013: û���ҵ��ļ�: �汾��10574����·�� ��/aap/branches/20180613�� 前几天遇到了这个问题,心里特别崩溃,之前可以从主干 ...

  5. Webpack Plugin

    [Webpack Plugin] Since Loaders only execute transforms on a per-file basis, plugins are most commonl ...

  6. python websocket网页实时显示远程服务器日志信息

    功能:用websocket技术,在运维工具的浏览器上实时显示远程服务器上的日志信息 一般我们在运维工具部署环境的时候,需要实时展现部署过程中的信息,或者在浏览器中实时显示程序日志给开发人员看.你还在用 ...

  7. 批量执行命令(SSH)

    for a in {1..6} ; do scp /etc/hosts enc-bigdata0$a:/etc/hosts ; done

  8. AngularJS——第7章 依赖注入

    第7章 依赖注入 AngularJS采用模块化的方式组织代码,将一些通用逻辑封装成一个对象或函数,实现最大程度的复用,这导致了使用者和被使用者之间存在依赖关系. 所谓依赖注入是指在运行时自动查找依赖关 ...

  9. 在eclipse上写代码的时候,tomcat突然不能用了,重启都是闪一下就关了

    严重: A child container failed during start 严重: The required Server component failed to start so Tomca ...

  10. RSA加密遇到的一个问题

    1,最近在项目里面使用了RSA加密解密的功能 出现的异常情况是加解密时对于有中文的情况会出现乱码,导致无法正常解析参数   解决方案人认为:针对中文应该 先encode ,这样能有效的避免乱码