• 别墅房间 CodeVS原创


    题目描述 Description

    小浣熊松松到他的朋友家别墅去玩,发现他朋友的家非常大,而且布局很奇怪。具体来说,朋友家的别墅可以被看做一个N*M的矩形,有墙壁的地方被标记为’#’,其他地方被标记为’.’。两个格子(a,b)和(c,d)被当做在同一个房间内,当且仅当|a-c|+|b-d|=1。现在松松想知道,有多少个房间。

    输入描述 Input Description

    第一行包含两个整数,N和M。

    接下来N行描述别墅的情况,只包含’*’和’.’。

    输出描述 Output Description

    输出仅一行,为房间数。

    样例输入 Sample Input

    3 3

    .#.

    #.#

    .#.

    样例输出 Sample Output

    5

    数据范围及提示 Data Size & Hint

    对于90%的数据,1<=N,M<=1000;

    对于100%的数据,1<=N,M<=2000。

    代码实现:

     1 #include<cstdio>
     2 #include<iostream>
     3 using namespace std;
     4 int n,m,ans;
     5 int bh[]={1,0,-1,0},bl[]={0,1,0,-1};
     6 char ch;
     7 bool map[2010][2010];
     8 void dfs(int h,int l){
     9     map[h][l]=1;
    10     for(int i=0;i<4;i++){
    11         int nh=h+bh[i],nl=l+bl[i];
    12         if(!map[nh][nl]&&nh>0&&nh<=n&&nl>0&&nl<=m) dfs(nh,nl);
    13     }
    14 }
    15 int main(){
    16     scanf("%d%d",&n,&m);
    17     for(int i=1;i<=n;i++)
    18     for(int j=1;j<=m;j++){
    19         cin>>ch;
    20         if(ch=='#') map[i][j]=1;
    21     }
    22     for(int i=1;i<=n;i++)
    23     for(int j=1;j<=m;j++)
    24     if(!map[i][j]){ans++;dfs(i,j);}
    25     printf("%d
    ",ans);
    26     return 0;
    27 }

    好消息,我还会打搜索。

    题目来源:CODE[VS]

  • 相关阅读:
    通过索引优化sql
    索引概述
    Spring整合Mybatis
    Mybatis逆向工程
    Mybatis级联
    Mybatis动态语句
    Mybatis—curd
    (转)最大似然估计&贝叶斯估计
    筛法求质——poj2262&2909
    (转)poj1182食物链
  • 原文地址:https://www.cnblogs.com/J-william/p/6297552.html
Copyright © 2020-2023  润新知