八连通 题目ID:1227 怎么写啊

题目描述:

八向连通八连通)区域指的是从区域内每一像素出发,可通过八个方向,即上、下、左、右、左上、右上、左下、右下这八个方向的移动的组合,在不越出区域的前提下,到达区域内的任意象素。

比如

上图就包含一个八连通,每两个蓝色格子都可以互相到达

给你一个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 个赞

连通快问题,深搜写就行

2 个赞

就是从一个可以出发的点,在那个点可以到的点全部标记,找完就sum++,最后统计sum

2 个赞
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 个赞

我的代码

#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;
}

算了,我AC了
不过解决方案还是会给的