题目描述(大意!)看到一串日文的我看了老半天才看懂
给一个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上交题是要看语言的...............

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

被折叠的 条评论
为什么被折叠?



