天天看点

hrbust 2147 哈理工oj 经理办公室【水题】

经理办公室
Time Limit: 1000 MS Memory Limit: 32768 K
Total Submit: 85(17 users) Total Accepted: 77(16 users) Rating: 
hrbust 2147 哈理工oj 经理办公室【水题】
hrbust 2147 哈理工oj 经理办公室【水题】
hrbust 2147 哈理工oj 经理办公室【水题】
Special Judge: No
Description
    经理有一个非常大的办公室,办公室里还有一些副经理和一些其他下级,在办公室每个人都有一个独特颜色的办公桌,桌子是矩形的并且每一条边与办公室的墙平行。一天,经理想给副经理们召开集会,很不幸,他不能准确的记得有多少个副经理,但是经理知道副经理的桌子与自己的桌子是贴着的,也就是说,经理与副经理的桌子是有一部分公共边的。     这个大办公室可以看成一个n*m的矩形,用一个大写字母代表桌子的颜色。不同字母代表不同人的桌子颜色,连续出现的相同字母的个数表示该人桌子的大小(表示桌子边长为字符个数单位长度),字符“.”表示这个位置没有人。
Input
    多组数据,第一行三个空格隔开的整数n,m和c,1≤n,m≤100 代表办公室的长和宽,C代表经理桌子的颜色。下面n行每行m个字符——对办公室的描述,输入确保每一个桌子的颜色是独一无二的,颜色用大写字母表示。
Output
    输出一个整数,这个办公室副经理的个数。
Sample Input
3 4 R G.B. .RR. TTT. 3 3 Z ... .H. ..Z
Sample Output
2 0
Source
2014暑假集训练习赛(8月6日)

很水很水很水的一道题。。。。数据也是很水很水、、、、

这里思路很简单明了:找到经理的桌子,遍历他的桌子的一周,(四个点)看看有没有其他颜色的桌子,如果有的话,对颜色进行标记、并且output++;

注意点图的大小,完事注意点地图的非法访问问题就行了、

#include<stdio.h>
#include<string.h>
using namespace std;
char a[2];
int n,m;
char map[500][500];
int vis[500][500];
int fx[4]={0,0,1,-1};
int fy[4]={1,-1,0,0};
int color[26];
int output;
void dfs(int x,int y)
{
   // printf("%d %d\n",x,y);
    vis[x][y]=1;
    for(int i=0;i<4;i++)
    {
        int xx=x+fx[i];
        int yy=y+fy[i];
        if(xx>=0&&xx<n&&yy>=0&&yy<m&&vis[xx][yy]==0)
        {
            if(map[xx][yy]>='A'&&map[xx][yy]<='Z'&&map[xx][yy]!=a[0])
            {
                if(color[map[xx][yy]-'A']==0)
                {
                    output++;
                    color[map[xx][yy]-'A']=1;
                }
            }
        }
    }
    return ;
}
int main()
{
    while(~scanf("%d%d%s",&n,&m,a))
    {
        memset(color,0,sizeof(color));
        memset(vis,0,sizeof(vis));
        for(int i=0;i<n;i++)
        {
            scanf("%s",map[i]);
        }
        output=0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(map[i][j]==a[0])
                {
                    dfs(i,j);
                }
            }
        }
        printf("%d\n",output);
    }
}