线段树误我 2023-03-15 23:39 采纳率: 28.6%
浏览 22
已结题

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


#include <iostream>
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<n;i++)
  scanf("%s",ch[i]);
  for(int i=0;i<n;i++){
    for(int j=0;j<n;j++)
    {
      if(ch[i][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;i<n;i++)
  {
    for(int j=0;j<n;j++)
    {
      if(ch[i][j]=='#'){
        sum1++;
      dfs1(i,j);
      }
    }
  }
  for(int i=0;i<n;i++)
  {
    for(int j=0;j<n;j++)
    {
      if(arr[i][j]=='#'){
        sum2++;
      dfs2(i,j);
      }
    }
  }
  printf("%d",sum1-sum2);
    return 0;
}

img


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

  • 写回答

3条回答 默认 最新

  • Chaydo 2023-03-16 16:54
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月24日
  • 已采纳回答 3月16日
  • 创建了问题 3月15日

悬赏问题

  • ¥15 速帮,学校需要在外上班没空
  • ¥15 人在外地出差,速帮一点点
  • ¥15 如何使用canvas在图片上进行如下的标注,以下代码不起作用,如何修改
  • ¥15 Windows 系统cmd后提示“加载用户设置时遇到错误”
  • ¥50 vue router 动态路由问题
  • ¥15 关于#.net#的问题:End Function
  • ¥15 无法import pycausal
  • ¥15 VS2022创建MVC framework提示:预安装的程序包具有对缺少的注册表值的引用
  • ¥15 weditor无法连接模拟器Local server not started, start with?
  • ¥20 6-3 String类定义