ZOJ2412 Farm Irrigation(农田灌溉) 搜索
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(农田灌溉) 搜索的更多相关文章
- ZOJ 2412 Farm Irrigation
Farm Irrigation Time Limit: 2 Seconds Memory Limit: 65536 KB Benny has a spacious farm land to ...
- ZOJ 2412 Farm Irrigation(DFS 条件通讯块)
意甲冠军 两个农田管内可直接连接到壳体 他们将能够共享一个水源 有11种农田 管道的位置高于一定 一个农田矩阵 问至少须要多少水源 DFS的连通块问题 两个相邻农田的管道能够直接连接的 ...
- HDUOJ--------(1198)Farm Irrigation
Farm Irrigation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU 1198 Farm Irrigation(并查集,自己构造连通条件或者dfs)
Farm Irrigation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- hdu.1198.Farm Irrigation(dfs +放大建图)
Farm Irrigation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU1198水管并查集Farm Irrigation
Benny has a spacious farm land to irrigate. The farm land is a rectangle, and is divided into a lot ...
- HDU 1198 Farm Irrigation (并检查集合 和 dfs两种实现)
Farm Irrigation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 【简单并查集】Farm Irrigation
Farm Irrigation Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Tot ...
- Farm Irrigation
题目:Farm Irrigation 题目链接:http://210.34.193.66:8080/vj/Problem.jsp?pid=1494 题目思路:并查集 #include<stdio ...
随机推荐
- 云主机上配置lamp环境 php5.6+apache2.2.15+mysql5.1.73
安装 PHP5.6 rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm; rp ...
- redis分布式锁Redisson扩展
如果大家项目中Redis是多机部署的可以来好好看看这篇实现,讲的非常好. 使用Redisson实现分布式锁,Spring AOP简化之 源码 Redisson概述 Redisson是一个在Redi ...
- 微信小程序商品筛选,侧方弹出动画选择页面
https://blog.csdn.net/qq_36538012/article/details/85110641
- 04_web基础(一)之tomcat介绍
01.web引入 在这之前我们已经能够在数据库进行CRUD,在dao处进行CRUD,在service处进行CRUD,对用户来说必须在浏览器上进行CRUD,要完成这个就必须具备web知识. 而web运行 ...
- SVN基本页面
- js 事件event
var EventUtil = { addHandler: function(element,type,handler){ if(element.addEventListener){ element. ...
- 可上下拖动且有浮沉动画的View
package com.ifenglian.superapp1; import android.animation.Animator;import android.animation.Animator ...
- pta6-15(双端循环队列)
题目链接:https://pintia.cn/problem-sets/1101307589335527424/problems/1101313244863737856 题意:实现双段队列的队首出队. ...
- NumPy 从已有的数组创建数组
NumPy 从已有的数组创建数组 本章节我们将学习如何从已有的数组创建数组. numpy.asarray numpy.asarray 类似 numpy.array,但 numpy.asarray 只有 ...
- [剑指Offer]59-队列的最大值(题目二待补)
题目一:滑动窗口的最大值 题目链接 https://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788?tpId=13&tqI ...