zoukankan      html  css  js  c++  java
  • JZ初中OJ 1341. [南海2009初中] water

    时间限制: 1000 ms  空间限制: 131072 KB  具体限制  

    题目描述

    全球气候变暖,小镇A面临水灾。于是你必须买一些泵把水抽走。泵的抽水能力可以认为是无穷大,但你必须把泵放在合适的位置,从而能使所有的水能流到泵里。小镇可以认为是N * M的矩阵。矩阵里的每个单元格都是一个‘a’- ‘z’小写字母,该小写字母表示该格子的高度,字母大的表示该单元格比较高,反之,表示该格子高度比较低。当前单元格的水可以流到上、下、左、右四个格子,但必须满足这些格子的高度是小于或者等于当前格子的高度。现在,给你一些N * M的矩阵,你至少要买多少个泵,才能把所有格子的水都能被抽走?

     

    输入

     多组测试数据。

     第一行:K,表示有K组测试数据。 1 <= K <= 5.

     接下来有K组测试数据,每组测试数据格式如下:

         第一行:两个正数, N , M . 1 <= N, M <= 50,表示小镇的大小。

         接下来有N行,每行有M个小写字母,表示小镇的地图。

    输出

    共K行,每行对应一组数据。至少要买多少个泵,才能把所有格子的水都能抽走。

     

    样例输入

     

    样例输出

     
     

    数据范围限制

     
     

    提示















    输入  

    2

     5 5

     ccccc

     cbbbc

     cbabc

     cbbbc

     ccccc

     4 9

     cbabcbabc

     cbabcbabc

     cbabcbabc

     cbabcbabc

    1

     11   11

     ccccccccccc

     caaaaaaaaac

     caaaaaaaaac

     caazpppzaac

     caapdddpaac

     caapdddpaac

     caapdddpaac

     caazpppzaac

     caaaaaaaaac

     caaaaaaaaac

     ccccccccccc

    输出

    1

    2

     2
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int n,m;
     4 char a[53][53];
     5 bool bj[53][53];
     6 int xi[]={0,0,-1,1};
     7 int yi[]={1,-1,0,0};
     8 void dfs(int x,int y)
     9 {
    10     bj[x][y]=true;
    11     for(int i=0;i<4;i++)
    12     {
    13         int x1=x+xi[i];
    14         int y1=y+yi[i];
    15         if(x1<=n && x1>0 && y1<=m && y1>0 && bj[x1][y1]==false && a[x1][y1]>=a[x][y]){
    16         dfs(x1,y1);
    17     }
    18 }}
    19 int main()
    20 {
    21     int k=0;
    22     cin>>k;
    23     while(k--)
    24     {
    25         memset(bj,false,sizeof bj);
    26         cin>>n>>m;
    27         for(int i=1;i<=n;i++)
    28             {
    29                 for(int j=1;j<=m;j++)
    30                 cin>>a[i][j];
    31             }
    32         int ans=0;
    33         for(char c='a';c<='z';c++){
    34             for(int i=1;i<=n;i++){
    35                 for(int j=1;j<=m;j++){
    36                     if(bj[i][j]==false && a[i][j]==c)
    37                         {
    38                             dfs(i,j);
    39                             ans++;
    40                         }
    41                     }
    42                 }
    43             }
    44         cout<<ans<<endl;
    45     }
    46 }
  • 相关阅读:
    十五天精通WCF——第六天 你必须要了解的3种通信模式
    十五天精通WCF——第五天 你需要了解的三个小技巧
    十五天精通WCF——第四天 你一定要明白的通信单元Message
    十五天精通WCF——第三天 client如何知道server提供的功能清单
    十五天精通WCF——第二天 告别烦恼的config配置
    十五天精通WCF——第一天 三种Binding让你KO80%的业务
    SimpleAdapter & BaseAdapter
    android:layout_gravity和android:gravity的区别
    Restrict & Cascade
    正确理解Mysql的列索引和多列索引
  • 原文地址:https://www.cnblogs.com/dsanying/p/11305646.html
Copyright © 2011-2022 走看看