楼逸杨
(楼逸杨)
1
题目描述:
八向连通(八连通)区域指的是从区域内每一像素出发,可通过八个方向,即上、下、左、右、左上、右上、左下、右下这八个方向的移动的组合,在不越出区域的前提下,到达区域内的任意象素。
比如
上图就包含一个八连通,每两个蓝色格子都可以互相到达
给你一个n*m的字符矩阵,一共有两种字符,求矩阵中有几个W的八连通。
输入格式:
输入一行,包含两个整数n,m.
接下来n行每行m个字符。
输出格式:
输出一个整数。
样例输入:
10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.
样例输出:
3
约定:
1 <=n ,m<=100
提示:
1 个赞
2345安全卫士
(蛋小黄(蒟蒻))
3
就是从一个可以出发的点,在那个点可以到的点全部标记,找完就sum++,最后统计sum
2 个赞
2345安全卫士
(蛋小黄(蒟蒻))
4
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(mp[i][j]=='W'&&vis[i][j]==0){
dfs(i,j);
ans++;
}
}
}
3 个赞
楼逸杨
(楼逸杨)
5
我的代码
#include<bits/stdc++.h>
using namespace std;
int n,m;
int ans=0;
int vis[105][105];
char mp[105][105];
void dfs(int x) {
int i,j;
for(i=1; i<=n; i++) {
for(j=1; j<=m; j++) {
if(mp[i][j]=='W'&&vis[i][j]==0) {
dfs(i,j);
ans++;
}
}
}
}
int main() {
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mp[i][j];
}
}
dfs(1);
cout<<ans;
return 0;
}