题目网址: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 ",numr,numb); } return 0; }
搜索的简单例题,居然花了2个小时,各种小错误,有种跳楼的感觉
版权声明:本文为博主原创文章,未经博主允许不得转载。