BNUOJ 1038 Flowers

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

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

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

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

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

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

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

Input

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

Output

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

Sample Input

6 7
.......
..***..
..*..*.
..*..*.
...**..
.......
5 7
.......
..***..
..*.*..
..***..
.......

Sample Output

4
1

一般想得到的方法是搜索大法,当然这道题也可以直接暴力循环

#include<stdio.h>
int k[102][102];
char l[102];
int n,m;
int x[4]={-1,0,0,1},y[4]={0,-1,1,0};
void dfs(int a,int b)
{
    for(int i=0;i<4;i++)
    {
        int xx=a+x[i];
        int yy=b+y[i];
        if(xx>-1&&xx<n&&yy>-1&&yy<m&&k[xx][yy]!=0)
        {
            k[xx][yy]=0;
            dfs(xx,yy);
        }
    }
}
int main()
{  while(scanf("%d%d",&n,&m)!=EOF)
    {int flag=0,p,q;
  for(int i=0;i<n;i++)
 {

            scanf("%s",l); for(int j=0;j<m;j++)

            {
                if(l[j]==‘.‘)
                    k[i][j]=1;
                else k[i][j]=0;
            }
        }
        for(int i=0;i<m;i++)
        {
            if(k[0][i]==1)
            {
                k[0][i]=0;
                dfs(0,i);
            }
            if(k[n-1][i]==1)
            {
                k[n-1][i]=0;
                dfs(n-1,i);
            }
        }
        for(int i=1;i<n-1;i++)
        {
            if(k[i][0]==1)
            {
                k[i][0]=0;
                dfs(i,0);
            }
            if(k[i][m-1]==1)
            {
                k[i][m-1]=0;
                dfs(i,m-1);
            }
        }
        int sum=0;
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                if(k[i][j]==1)
                    sum++;  printf("%d\n",sum);

          }
}

时间: 2024-11-03 13:48:14

BNUOJ 1038 Flowers的相关文章

BNUOJ 1038 Flowers(BFS)

Flowers Time Limit: 1000ms Memory Limit: 65535KB 64-bit integer IO format: %lld      Java class name: Main Prev Submit Status Statistics Discuss Next 春天到了,师大的园丁们又开始忙碌起来了. 京师广场上有一块空地,边界围成了一个多边形,内部被划分成一格一格的.园丁们想在这个多边形内的每一格内种植一些花. 现在请你帮忙计算一下一共最多可以种多少花.

HDU 1038[Biker&#39;s Trip Odometer]简单计算

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1038 题目大意:给轮子直径,转数,时间.要求输出走过的距离和时速(mile为单位) 关键思想:纯算 代码如下: #include <iostream> using namespace std; #define pi 3.1415927 int main(){ double d,r,t,l; int cnt=1; while(cin>>d>>r>>t&&a

Flowers(二分水过。。。)

Flowers Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2579    Accepted Submission(s): 1265 Problem Description As is known to all, the blooming time and duration varies between different kinds

hihoCoder #1038 : 01背包

思路:直接 DP解的,方式固定. 1 #include <iostream> 2 #include <stdio.h> 3 #include <cstring> 4 #include <string> 5 using namespace std; 6 7 int dp[100005]; 8 int coms[505]; 9 int value[505]; 10 int max(int a, int b){return a>b?a:b;} 11 12 i

杭电 HDU 1038 Biker&#39;s Trip Odometer

Biker's Trip Odometer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4745    Accepted Submission(s): 3144 Problem Description Most bicycle speedometers work by using a Hall Effect sensor faste

bnuoj 17184 代数

bnuoj 17184 代数 题意: 现有N个未知数A[1],A[2],-A[N],以及M个方程,每个方程都是形如A[s]+A[s+1]+A[s+2]+-A[t-1]+A[t]=c.现在求解这个方程组. 限制: 1 <= n,m <= 1e5; 1 <= s,t <= N; 0 <= c < 1e9 思路: 带权并查集. 这道题想了好久没想通,最后才知道还可以用并查集做,涨知识了. 感谢http://blog.csdn.net/balloons2012/article/

Codeforces Round #261 (Div. 2) 459B. Pashmak and Flowers(数学题,组合)

题目链接:http://codeforces.com/problemset/problem/459/B B. Pashmak and Flowers time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output Pashmak decided to give Parmida a pair of flowers from the garden.

BNUOJ 1206 A Plug for UNIX

A Plug for UNIX Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID: 108764-bit integer IO format: %lld      Java class name: Main You are in charge of setting up the press room for the inaugural meeting of the Un

BNUOJ 17286 Dollars

Dollars Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVA. Original ID: 14764-bit integer IO format: %lld      Java class name: Main New Zealand currency consists of $100, $50, $20, $10, and $5 notes and $2, $1, 50c, 20c, 1