zoukankan      html  css  js  c++  java
  • POJ2386-Lake Counting

    【题目描述】

    有一个大小为M*N的园子,雨后积起了水。八连通的积水被认为是连接在一起的。请求出园子里共有多少水洼?(八连通指的是下面图中相对W的*的部分)
    ***
    *W*
    ***

    【输入】

    第一行包含两个正整数 N 和 M,表示将一个园子地面分成N*M块方格,N 行,M列,接下来的 N 行描述了园子地面状况,其中‘W’表示积水的水洼,‘.’表示没有积水。

    【输出】

    仅一个数,表示水洼的总数。

    【输入示例】

    10 12
    w........ww.
    .www.....www
    ....ww...ww.
    .........ww.
    .........w..
    ..w......w..
    .w.w.....ww.
    w.w.w.....w.
    .w.w......w.
    ..w.......w.

    【输出示例】

    3

    【思路】

    很简单的搜索题,像我这样的蒟蒻都能做出来。

    只要用二层循环把每个水洼第一个被搜到的部分搜索,计数器++。

    搜索把每个可能去的地方走一遍。

    把第一个搜到的部分设为平地。

    【代码】

    #include<iostream>
    using namespace std;
    int m,n,cnt=0;
    char ct[100][100];
    void s(int x,int y)
    {
        ct[x][y]='.';
        int i,j;
        for(i=-1;i<=1;i++)
        {
            for(j=-1;j<=1;j++)
            {
                if(ct[x+i][y+j]=='w'&&x+i>=0&&x+i<m&&y+j>=0&&y+j<n)
                {
                    s(x+i,y+j);
                }
            }
        }
        return;
    }
    int main()
    {
        cin>>m>>n;
        int i,j;
        for(i=0;i<m;i++)
        {
            for(j=0;j<n;j++)
            {
                cin>>ct[i][j];
            }
        }
        for(i=0;i<m;i++)
        {
            for(j=0;j<n;j++)
            {
                if(ct[i][j]=='w')
                {
                    s(i,j);
                    cnt++;
                }
            }
        }
        cout<<cnt;
        return 0;
    }

     

     

     

  • 相关阅读:
    7-3.自定义列表
    GoLang 使用协程与管道随机生成姓名
    [Unity3D] 点击物品显示物品信息
    [Unity3D] 碰撞物体添加到背包
    [PS] DDS文件导入插件
    [Unity3D] 给角色添加武器
    [Unity3D] 刚体 碰撞器 触发器
    [Unity3D] 物体的几种移动方法
    [Unity3D] 解决导入的模型出现闪烁的问题
    [Unity3D] 人物角色跳跃(动画跳跃&刚体跳跃)
  • 原文地址:https://www.cnblogs.com/4D24/p/9437285.html
Copyright © 2011-2022 走看看