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

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

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

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

广场用一个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

Source

第七届北京师范大学程序设计竞赛热身赛第四场

#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;
const int N = 105 ;
struct node
{
    int x,y;
};
char mapt[N][N];
int vist[N][N],n,m;
int dir[4][2]={0,1,0,-1,1,0,-1,0};

int bfs(int x,int y)
{
    queue<node>q;
    node now,pre;
    int ans=1,flag=1;
    vist[x][y]=1;
    now.x=x; now.y=y;
    q.push(now);
    while(!q.empty())
    {
        pre=q.front(); q.pop();
        for(int e=0; e<4; e++)
        {
            now.x=pre.x+dir[e][0];
            now.y=pre.y+dir[e][1];
            if(now.x<0||now.x>=n||now.y<0||now.y>=m)
            {
                flag=0; continue;
            }
            if(!vist[now.x][now.y]&&mapt[now.x][now.y]=='.')
            {
                vist[now.x][now.y]=1;
                ans++;
                q.push(now);
            }
        }
    }
    if(flag==0) ans=0;
    return ans;
}
int main()
{
    //int n,m;
    while(scanf("%d%d",&n,&m)>0)
    {
        for(int i=0; i<n; i++)
            scanf("%s",mapt[i]);
        int ans=0;
        memset(vist,0,sizeof(vist));
        for(int i=0; i<n; i++)
            for(int j=0; j<m; j++)
            if(!vist[i][j]&&mapt[i][j]=='.')
             ans+=bfs(i,j);
        printf("%d\n",ans);
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-19 17:00:49

BNUOJ 1038 Flowers(BFS)的相关文章

BNUOJ 1038 Flowers

春天到了,师大的园丁们又开始忙碌起来了. 京师广场上有一块空地,边界围成了一个多边形,内部被划分成一格一格的.园丁们想在这个多边形内的每一格内种植一些花. 现在请你帮忙计算一下一共最多可以种多少花. 广场用一个M*N的字符数组表示,"."和"*"代表一个方格,其中"*"代表空地的边界,"."是空格,只有边界内部的空格才能用于种花. 一个空格位于边界内部,当且仅当由该点出发只允许向上.下.左.右四个方向移动,最终都会遇到边界.

【字符串+BFS】Problem 7. James Bond

https://www.bnuoj.com/v3/external/gym/101241.pdf [题意] 给定n个字符串,大小写敏感 定义一个操作:选择任意m个串首尾相连组成一个新串 问是否存在一个这样的串s,s可以由不同的串首尾相连得到 最多100个字符串,所有字符串的总长度不超过5000 [样例解释] aB5可以由a+B5得到,也可以由aB+5得到,所以输出YES [思路] 首先一定是在100个选择2个串a,b,a是b的前缀 然后a和b的前缀可以消去,我们想知道b剩下的右半部分是哪一个串的

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 1268 PIGS

PIGS Time Limit: 1000ms Memory Limit: 10000KB This problem will be judged on PKU. Original ID: 114964-bit integer IO format: %lld      Java class name: Main Mirko works on a pig farm that consists of M locked pig-houses and Mirko can't unlock any pig

BNUOJ 5629 胜利大逃亡(续)

胜利大逃亡(续) Time Limit: 2000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 142964-bit integer IO format: %I64d      Java class name: Main Ignatius再次被魔王抓走了(搞不懂他咋这么讨魔王喜欢)…… 这次魔王汲取了上次的教训,把Ignatius关在一个n*m的地牢里,并在地牢的某些地方安装了带锁的门,钥匙藏在

[hdu 2102]bfs+注意INF

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 感觉这个题非常水,结果一直WA,最后发现居然是0x3f3f3f3f不够大导致的--把INF改成INF+INF就过了. #include<bits/stdc++.h> using namespace std; bool vis[2][15][15]; char s[2][15][15]; const int INF=0x3f3f3f3f; const int fx[]={0,0,1,-1};

BFS+康托展开(洛谷1379 八数码难题)

在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为123804765),找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变. 输入格式: 输入初试状态,一行九个数字,空格用0表示 输出格式: 只有一行,该行只有一个数字,表示从初始状态到目标状态需要的最少移动次数(测试数据中无特殊无法到达目标状态数据) 输入样例#1: 2831

Sicily 1444: Prime Path(BFS)

题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 1 #include<bits/stdc++.h> 2 using namespace std; 3 4 bool isPrime(int n){//素数判断 5 if(n == 2 || n == 3) return true; 6 else{ 7 int k = sqrt(n) + 1; 8 for(int i = 2; i < k; i

HDU 5925 Coconuts 【离散化+BFS】 (2016CCPC东北地区大学生程序设计竞赛)

Coconuts Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 524    Accepted Submission(s): 151 Problem Description TanBig, a friend of Mr. Frog, likes eating very much, so he always has dreams abou