求解!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

void dfs(int x, int y, int x1, int y1) {
if (sum > minn) {
return;
}
if (x == x1 && y == y1) {
minn = min(sum, minn);
return;

2. 八连通

题目ID:1227必做题100分

最新提交:

Wrong Answer

0 分

历史最高:

Wrong Answer

0 分

时间限制: 1000ms

空间限制: 262144kB

题目描述

时间:1s 空间:256M

题目描述:

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

比如

[image]

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

给你一个n*m的字符矩阵,一共有两种字符,求矩阵中有几个W的八连通。

输入格式:

输入一行,包含两个整数�,�n,m.

接下来�n行每行�m个字符。

输出格式:

输出一个整数。

#include<bits/stdc++.h>
using namespace std;
int n,m;
char a[105][105];
int b[105][105];
int sum=0;
bool flag[1000][1000];
int f1[8]={0,0,-1,1,1,-1,1,-1};
int f2[8]={1,-1,0,0,1,-1,-1,1};
void dfs(int x,int y)
{
if(flag[y])
return;

for(int i=0;i<8;i++){
  int xx=x+f1[i];
  int yy=y+f2[i];
  if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&a[xx][yy]=='W')
  {
    flag[xx][yy]=1;
     dfs(xx,yy);
}

}
}

int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
if(a[i][j]==‘W’&&!flag[i][j]){
sum++;
dfs(i,j);
}
}
}
cout<<sum;
return 0;
}
有木有大佬

flag[x][y]=1

以经试过了也不行

image

还有

 for (int i = 1; i <= n; i++) {
     for (int j = 1; j <= m; j++) {
         cin >> a[i][j];
         if (a[i][j] == 'W' && !flag[i][j]) {
             sum++;
             dfs(i, j);
         }
     }
 }

分成2个for写

for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            cin >> a[i][j];
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            if (a[i][j] == 'W' && !flag[i][j]) {
                sum++;
                dfs(i, j);
            }
        }
    }

image