关于#c++ 蓝桥杯疑惑#的问题,请各位专家解答!


#include 
using namespace std;
char ch[1005][1005],arr[1005][1005]={0};
int n,sum1=0,sum2=0,dre1[4]={0,0,1,-1},dre2[4]={1,-1,0,0};
void dfs2(int i,int j)
{
  arr[i][j]='.';
  for(int k=0;k<4;k++)
  {
    int x=dre1[k]+i;
    int y=dre2[k]+j;
      if(arr[x][y]=='#')
     dfs2(x,y);
  }
}
void dfs1(int i,int j)
{
  ch[i][j]='.';
  for(int k=0;k<4;k++)
  {
    int x=dre1[k]+i;
    int y=dre2[k]+j;
     if(ch[x][y]=='#')
     dfs1(x,y);
  }
}
int main()
{
  scanf("%d",&n);
  for(int i=0;i"%s",ch[i]);
  for(int i=0;i0;j'.')
      arr[i][j]='.';
      if(ch[i][j]=='#')
      {
        if(ch[i-1][j]=='.'||ch[i+1][j]=='.'||ch[i][j-1]=='.'||ch[i][j+1]=='.')
        arr[i][j]='.';
        else
        arr[i][j]='#';
      }
    }
  }
   for(int i=0;i0;j'#'){
        sum1++;
      dfs1(i,j);
      }
    }
  }
  for(int i=0;i0;j'#'){
        sum2++;
      dfs2(i,j);
      }
    }
  }
  printf("%d",sum1-sum2);
    return 0;
}

img


我想问下这个为什么过不了所有点啊

如果一个岛里有两块陆地,他们的四周也是陆地,但它们并不相连,按照你main函数第一个双重循环中对判断为陆地且四周有一海洋会把这块陆地设为海洋的设定,会把这两块陆地分成两座岛屿,然而实际上它们属于一块岛屿

还是代码中的问题,自己仔细调试下每一行。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^