zoukankan      html  css  js  c++  java
  • BNUOJ flower (搜索)

    春天到了,师大的园丁们又开始忙碌起来了.

    京师广场上有一块空地,边界围成了一个多边形,内部被划分成一格一格的.园丁们想在这个多边形内的每一格内种植一些花.

    现在请你帮忙计算一下一共最多可以种多少花.

    广场用一个M*N的字符数组表示,"."和"*"代表一个方格,其中"*"代表空地的边界,"."是空格,只有边界内部的空格才能用于种花.
    一个空格位于边界内部,当且仅当由该点出发只允许向上、下、左、右四个方向移动,最终都会遇到边界。


    例如下面就是一个6*7的广场

    .......
    ..***..
    ..*..*.
    ..*..*.
    ...**..
    .......

    种花方案如下(数字代表的地方)
    .......
    ..***..
    ..*12*.
    ..*34*.
    ...**..
    .......
     

    Input

    输入数据第一行是M和N(M和N不超过100),代表有广场的大小
    接下来就是一个M*N的字符矩阵,是广场的表示
     

    Output

    对应于输入数据,输出一个整数,给出输入的情形能够种的花数目.
     

    Sample Input

    Sample Input1
    6 7
    .......
    ..***..
    ..*..*.
    ..*..*.
    ...**..
    .......
    Sample Input2
    5 7
    .......
    ..***..
    ..*.*..
    ..***..
    .......

    Sample Output

    Sample Output1
    4
    Sample Output2
    1
     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstdio>
     4 #include <cstring>
     5 using namespace std;
     6 int map[101][101];
     7 int dirx[4]={1,-1,0,0};
     8 int diry[4]={0,0,-1,1};
     9 int m,n;
    10 int dfs(int x,int y)
    11 {
    12     int i,j,dx,dy;
    13     if(x<0||x>m+1||y<0||y>n+1||map[x][y]==1)
    14         return 0;
    15     map[x][y]=1;
    16     for(i=0;i<4;i++)
    17     {
    18         dx=x+dirx[i];
    19         dy=y+diry[i];
    20         dfs(dx,dy);
    21     }
    22     return 0;
    23 }
    24 int main()
    25 {
    26     int i,j;
    27     //freopen("in.txt","r",stdin);
    28     while(cin>>m>>n)
    29     {
    30         char s;
    31         bool flag=0;
    32         int sum=0;
    33         memset(map,0,sizeof(map));
    34         for(i=1;i<=m;i++)
    35         {
    36             for(j=1;j<=n;j++)
    37             {
    38                 cin>>s;
    39                 map[i][j]=(s=='.'?0:1);
    40             }
    41         }
    42         dfs(0,0);
    43         for(i=1;i<=m;i++)
    44         {
    45             for(j=1;j<=n;j++)
    46                 if(map[i][j])
    47                     sum++;
    48         }
    49         cout<<m*n-sum<<endl;
    50     }
    51 }
  • 相关阅读:
    unity3D打造skybox淡入淡出
    FastGUI for NGUI教程
    (转)oracle的split函数
    (转)oracle嵌套表示例
    (转)pipe row的用法, Oracle split 函数写法.
    (转)Oracle 包(Package)
    (转)Oracle存储过程中的事务
    distinct与order by
    Oracle存储过程使用总结
    (转)Oracle中动态SQL详解
  • 原文地址:https://www.cnblogs.com/a1225234/p/4896350.html
Copyright © 2011-2022 走看看