• 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 }
  • 相关阅读:
    Swift基础
    win32多线程 (六)信号量 Synchronization
    win32 多线程 (五)Event
    win32多线程 (四) Mutex
    win32多线程(三) 死锁
    win32多线程 (二)线程同步之临界区 (critical sections)
    win32多线程 (一) 线程创建与结束等待
    简单Factory模式
    单键模式
    jquery中click事件重复绑定问题
  • 原文地址:https://www.cnblogs.com/dsanying/p/11305646.html
Copyright © 2020-2023  润新知