您的位置:首页 > 其它

搜索 基础 AC 2014-01-14 15:53 170人阅读 评论(0) 收藏

2014-01-14 15:53 197 查看
题目网址:http://haut.openjudge.cn/xiyoulianxi1/1/

1:晶矿的个数

查看
提交
统计
提问

总时间限制: 1000ms 内存限制: 65536kB

描述

在某个区域发现了一些晶矿,已经探明这些晶矿总共有分为两类,为红晶矿和黑晶矿。现在要统计该区域内红晶矿和黑晶矿的个数。假设可以用二维地图m[][]来描述该区域,若m[i][j]为#表示该地点是非晶矿地点,若m[i][j]为r表示该地点是红晶矿地点,若m[i][j]为b表示该地点是黑晶矿地点。一个晶矿是由相同类型的并且上下左右相通的晶矿点组成。现在给你该区域的地图,求红晶矿和黑晶矿的个数。

输入第一行为k,表示有k组测试输入。

每组第一行为n,表示该区域由n*n个地点组成,3 <= n<= 30

接下来n行,每行n个字符,表示该地点的类型。
输出对每组测试数据输出一行,每行两个数字分别是红晶矿和黑晶矿的个数,一个空格隔开。
样例输入
2
6
r##bb#
###b##
#r##b#
#r##b#
#r####
######
4
####
#rrb
#rr#
##bb


样例输出
2 2
1 2


#include<stdio.h>
int d[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
char map[35][35];

void clean(char c,int x,int y){
int i;
map[x][y]='#';
for(i=0;i<4;i++){
int k=x+d[i][0];
int b=y+d[i][1];
if(map[k][b]==c){
clean(c,k,b);
}
}
}

int main(){
int s,n;
int x,y;
scanf("%d",&n);
while(n--){
int numb=0;
int numr=0;
scanf("%d",&s);
getchar();
for(x=0;x<s;x++){
for(y=0;y<s;y++){
scanf("%c",&map[x][y]);
}
getchar();
}

for(x=0;x<s;x++){
for(y=0;y<s;y++){
if(map[x][y]=='b'){
clean('b',x,y);
numb++;
}
if(map[x][y]=='r'){
clean('r',x,y);
numr++;
}
}
}

printf("%d %d\n",numr,numb);
}
return 0;
}


搜索的简单例题,居然花了2个小时,各种小错误,有种跳楼的感觉
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐