aizu/aoj-0118-Property Distribution

本文介绍了一个使用深度优先搜索(DFS)算法解决二维矩阵中相同元素构成的连通块计数问题的方法。通过给出具体的代码实现,详细解释了如何遍历矩阵并标记已访问节点的过程。

题目描述(大意!)看到一串日文的我看了老半天才看懂

给一个H×W的图,找到有多少个连通的内容一样的块(?)。

输入:有多组数据,H、W、和一张图。H=W=0时结束。

输出:每一行输出块(?)的数量。

 

sample input

 

10 10
####*****@
@#@@@@#*#*
@##***@@@*
#****#*@**
##@*#@@*##
*@@@@*@@@#
***#@*@##*
*@@@*@@##@
*@*#*@##**
@****#@@#@
0 0

 

 

 

sample output

33

 

思路:dfs,然后对走过的点做标记。【这玩意是叫floodfill吗】

下为代码。

 

#include<cstdio>
#include<cstring>
int h,w,ans,b[105][105],dr[5]={0,1,0,-1,0};
char a[105][105];
void dfs(int x,int y,char c)
{
	if(x>h||y>w||x<0||y<0||a[x][y]!=c||b[x][y]) return;
	b[x][y]=ans;
	for(int i=1;i<=4;i++) dfs(x+dr[i-1],y+dr[i],c);
}
int main()
{
	int i,j;
	while(1)
	{
		scanf("%d%d",&h,&w);
		if(!h) break;
		for(i=1;i<=h;i++) scanf("%s",a[i]+1);
		memset(b,0,sizeof(b));ans=0;
		for(i=1;i<=h;i++)
			for(j=1;j<=w;j++)
				if(!b[i][j]) 
				{
					ans++;dfs(i,j,a[i][j]);
				}
		printf("%d\n",ans);
	}
}

 

 

 

 

 

题外话:

在AC之前,我CE过一次。

原因:提交的时候,没看语言,直到pending的时候我才发现........我交成了C语言......................................................

这个故事告诉我们,在OJ上交题是要看语言的...............

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值