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

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

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

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

DFS的连通块问题  两个相邻农田的管道能够直接连接的话他们就属于一个连通块  题目就是求连通块个数 

#include<cstdio>
#include<cstring>
using namespace std;
const int N = 55;
char mat[N][N];
int type[11][4] = {   //相应11种水管类型 按顺时针方向有管道的为1否则为0
    {1, 0, 0, 1}, {1, 1, 0, 0}, {0, 0, 1, 1}, {0, 1, 1, 0},
    {1, 0, 1, 0}, {0, 1, 0, 1}, {1, 1, 0, 1}, {1, 0, 1, 1},
    {0, 1, 1, 1}, {1, 1, 1, 0}, {1, 1, 1, 1}
};

int dfs(int r, int c)
{
    int cur = mat[r][c] - 'A';
    if(cur < 0 || cur > 10) return 0;
    mat[r][c] = 0;           //标记已经訪问 0-'A'是小于0的
    int up = mat[r - 1][c] - 'A', dw = mat[r + 1][c] - 'A',
        le = mat[r][c - 1] - 'A', ri = mat[r][c + 1] - 'A';  //4个相邻块的管道类型
    if(up > -1 && up < 11 && type[up][2] && type[cur][0])  dfs(r - 1, c);
    if(dw > -1 && dw < 11 && type[dw][0] && type[cur][2])  dfs(r + 1, c);
    if(le > -1 && le < 11 && type[le][1] && type[cur][3])  dfs(r, c - 1);
    if(ri > -1 && ri < 11 && type[ri][3] && type[cur][1])  dfs(r, c + 1);
    return 1;     //一个连通块中仅仅有一个返回1
}

int main()
{
    int n, m, ans;
    while (scanf("%d%d", &n, &m), n >= 0)
    {
        ans = 0;
        memset(mat, 0, sizeof(mat));
        for(int i = 1; i <= n; ++i)
            scanf("%s", mat[i] + 1);
        for(int i = 1; i <= n; ++i)
            for(int j = 1; j <= m; ++j)
                ans += dfs(i, j);
        printf("%d\n", ans);
    }
    return 0;
}


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.


ZOJ 2412 Farm Irrigation(DFS 条件通讯块)
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


ZOJ 2412 Farm Irrigation(DFS 条件通讯块)
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



版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117484.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月5日 上午6:00
下一篇 2022年1月5日 上午6:00


相关推荐

  • 微软面试题大全

    微软面试题大全微软面试题大全 1 为什么下水道的盖子是圆的 nbsp nbsp nbsp nbsp 2 美国有多少辆汽车 nbsp nbsp nbsp nbsp 3 你让工人为你工作七天 回报是一根金条 这个金一平分成相连的 7 段 你必须在每天结束的时候给他们一段金条 如果只许你两次把金条弄断 你如果给你的工人付费 nbsp nbsp nbsp nbsp 3

    2026年3月27日
    2
  • VCProtect虚拟机加壳工具

    VCProtect虚拟机加壳工具虚拟机加壳工具,可以给目标程序加上虚拟机,同时提供多态变形功能。下载http://www.vcprotect.com

    2022年6月27日
    52
  • pycharm 设置代码改变重新运行_PyCharm远程运行调试代码

    pycharm 设置代码改变重新运行_PyCharm远程运行调试代码本介绍了使用 PyCharm 进行远程 debug 的方法 实现本地写代码 远程服务器训练模型和调试代码的功能 为什么要用远程运行调试 有这么一个应用场景 你的代码需要在服务器端运行 因为运行环境安装的依赖库都在远端服务器上 而写代码的工作在本地的平台上更顺手 在此之前都是用 VisualStudio 编辑代码 然后用同步到远端服务器 再通过 SSH 登录服务器运行程序 这样的工作流程不仅效率低 容易

    2026年3月17日
    2
  • 云存储要发展安全性和可用性问题需解决

    云存储要发展安全性和可用性问题需解决

    2022年3月6日
    53
  • vmware workstation虚拟机上网配置

    vmware workstation虚拟机上网配置vmwareworkstation的虚拟机上网,简单的有两种方式:桥接和NAT。实际上还有一种上网方式是主机方式(即通过vmnet1网卡),但有点不实用,此处就不讲了。

    2022年5月19日
    46
  • ATA考试该注意什么[通俗易懂]

    ATA考试该注意什么[通俗易懂]一、考试前将所有计算机除掉还原卡及还原软件。二、officeXp安装要用完全安装。三、服务器端尽量不要刷新所有客户端否则引起考试管理系统死机。四、拍照功能无法使用,可重新启动考试管理系统。五、服务器端无法扫描到客户端,除了服务器与客户端必须在同一网段内,可看一下客户端是否启动llistening…

    2022年7月13日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号