广搜题RE 大佬看看

42. 求细胞数量

题目ID:8112必做题100分

最新提交:

Runtime Error

0 分

历史最高:

Runtime Error

0 分

时间限制: 100ms

空间限制: 131072kB

题目描述

一矩形阵列由数字 0 到 9 组成,数字 1 到 9 代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。

输入格式

第一行两个整数代表矩阵大小 n 行和 m 列。(1≤ n,m ≤ 100)
接下来 n 行,每行一个长度为 m 的只含字符 0 到 9 的字符串,代表这个 n×m 的矩阵。

输出格式

一个整数代表细胞的个数。

样例

Input 1

4 10 0234500067 1034560500 2045600671 0000000089

Output 1

4

数据范围

1≤ m, n ≤ 100

#include<stdio.h>

struct z{
	int x,y;
}q[30000];

bool map[200][200],p[200][200];
int n,m,ans,c[4][2]={0,1,1,0,-1,0,0,-1};
char a;

void bfs(int x,int y){
	ans++;
	int f=0,r=1,X,Y;
	q[1].x=x;
	q[1].y=y;
	while(f<r){
		f++;
		X=q[f].x,Y=q[f].y;
		p[X][Y]=1;
		for(int i=0;i<4;i++){
			int xx=X+c[i][0];
			int yy=Y+c[i][1];
			if(map[xx][yy]&&(!p[xx][yy])){
				q[++r].x=xx;
				q[r].y=yy;
			}
		}
	}
}
int main(){
	scanf("%d %d",&m,&n);
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			scanf("%d",&a);
			map[i][j]=(a!='0');
		}
	}
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			if(!p[i][j]&&map[i][j]){
				bfs(i,j);
			}
		}
	}
	printf("%d",ans);
}
1 个赞

没有一个人帮助悲惨的王颢,你还是去问汪浩老师吧。

这不是深搜吗?

这不是可以广搜吗

image
这样让费空间
这里去掉
image

这里加一句
p[y]=1
image

这里加一句
p[xx][yy]=1

2 个赞

大佬!!!!

1 个赞

好吧,没加

return 0;
1 个赞

这个没关系吧

1 个赞

改了就WA了(虽然不RE了

1 个赞