NEUQ oj 1861: 聪会长的关爱

来源:互联网 发布:c语言无法打开源文件 编辑:程序博客网 时间:2024/04/28 22:32

1861: 聪会长的关爱

描述

题目描述:

大家都知道NEUQ-ACM俱乐部的会长聪聪是个英俊帅气的暖男,他最喜欢关心各路好看的妹子了。 这一天,他来到工学馆的一间教室,发现好多好多的漂亮小姐姐。但是小姐姐们都被一些丑陋的男人围着,聪聪很害怕,他不想得罪他们。 所以聪聪决定从一个小姐姐开始,把所有和她相邻的小姐姐,以及相邻的相邻的小姐姐(相邻小姐姐是指横、竖或对角线方向的第一位小姐姐)都关心一遍,而不跨过那些丑陋的男人。 请问聪聪最多能关心到多少个小姐姐?

输入:

多组输入。 每组第一行输入两个数m和n(0<m,n<=1000),表示教室的大小,有m行n列的座位。当m和n为0时停止程序。 输入一个教室的人员分布图,用一个矩阵表示,其中“@”表示小姐姐,“*”表示丑陋的男人。

输出:

每组输出一行一个数字,表示聪聪最多能撩到的小姐姐数量。

样例输入
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0
样例输出
8
#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>#include<math.h>#include<queue>using namespace std;struct node{    int x;    int y;    int sum;}temp,temp1;int r[10005];char aa[1005][1005];int vis[1005][1005];int dx[10]={0,0,1,-1,1,1,-1,-1};int dy[10]={-1,1,0,0,1,-1,-1,1};int m,n;int  bfs(int x,int y){    queue<node >q;    node s;    vis[x][y]=1;    s.x=x;    s.y=y;    q.push(s);    int ans=1;    while(!q.empty())        {             temp=q.front();             q.pop();             for(int i=0;i<8;i++)             {                temp1.x=temp.x+dx[i];                temp1.y=temp.y+dy[i];                if(temp1.x>=0&&temp1.x<m&&temp1.y>=0&&temp1.y<n&&aa[temp1.x][temp1.y]=='@'&&!vis[temp1.x][temp1.y])                {                        vis[temp1.x][temp1.y]=1;                        cout<<temp1.x<<" "<<temp1.y<<endl;                        ans++;                        q.push(temp1);                }             }        }    return ans;}int main(){    while(cin>>m>>n)    {        char ch=getchar();        memset(vis,0,sizeof(vis));        for(int i=0;i<m;i++)        {            scanf("%s",aa[i]);        }        int cnt=0;        for(int i=0;i<m;i++)        {            for(int j=0;j<n;j++)            {                if(aa[i][j]=='@'&&!vis[i][j])                {                   r[cnt++]=bfs(i,j);                }            }        }        sort(r,r+cnt);        cout<<r[cnt-1]<<endl;    }    return 0;}


原创粉丝点击