鱼C论坛

 找回密码
 立即注册
查看: 435|回复: 1

哪里错了

[复制链接]
发表于 2024-4-4 10:57:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<bits/stdc++.h>
using namespace std;
char map[55][55];
int ans;
int n,m;
bool sea[55][55];
bool land[55][55];
queue<pair<int,int>>q;
int dx1[8]={-1,-1,0,1,1,1,0,-1};
int dy1[8]={0,1,1,1,0,-1,-1,-1};
int dx2[4]={-1,0,1,0};
int dy2[4]={0,1,0,-1};
void dfs(int x,int y){
    for(int i=0;i<4;i++){
      int xx=x+dx2[i];
      int yy=y+dy2[i];
      if(xx<1||yy<1||xx>n||yy>m)
      continue;
      if(map[xx][yy]=='0')
      continue;
      if(!land[xx][yy]&&map[xx][yy]=='1'){
          land[xx][yy]=true;
          dfs(xx,yy);
      }
    }
}
void bfs(int x,int y){
      q.push({x,y});
      while(!q.empty()){
          auto t=q.front();
          q.pop();
          x=t.first;
          y=t.second;
          for(int i=0;i<8;i++){
            int xx=x+dx1[i];
            int yy=y+dy1[i];
            if(xx<0||yy<0||xx>n+1||yy>m+1)
            continue;
            if(map[xx][yy]=='1'&&!land[xx][yy]){
              land[xx][yy]=true;
              ans++;
              dfs(xx,yy);
            }
            if(sea[xx][yy])
            continue;
            if(map[xx][yy]=='1')
            continue;
            sea[xx][yy]=true;
            q.push({xx,yy});
          }
      }
}
int main()
{
  int t;
  cin>>t;
  while(t--){
    ans=0;
    cin>>n>>m;
    memset(map,'0',sizeof(map));
    memset(sea,false,sizeof(sea));
  memset(land,false,sizeof(land));
     for(int i=1;i<=n;i++){
       for(int j=1;j<=m;j++){
         cin>>map[i][j];
       }
     }
     sea[0][0]=true;
     bfs(0,0);
  }
  return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-4 10:58:06 | 显示全部楼层
在你的代码中有几个问题:

1. 在 `#include` 后面没有包含正确的头文件。如果你要使用队列(queue)和memset函数,需要包含 `<queue>` 和 `<cstring>` 头文件。

2. 声明 char 数组时,应该确定数组的大小。例如,`char map[100][100];` 将创建一个 100x100 的二维字符数组。

3. 在 `bfs()` 函数中,`if(map[x][y]=='0')` 的条件判断是错误的。因为 `map` 是一个字符数组,应该使用单引号来表示字符。所以应该是 `if(map[x][y]=='0')`。

4. 你声明了两个全局变量 `queue q;` 和 `int ans;`,但是没有使用到它们。如果你想使用队列来实现 BFS 算法,可以使用 `std::queue` 类型来声明队列对象,比如 `std::queue<std::pair<int, int>> q;`。

5. 在 `dfs()` 函数中,循环条件 `for(int i=0;it;` 缺少了结束条件,应该是 `for(int i=0;i<8;i++)`。

6. 在 `main()` 函数中,`while(t--)` 循环没有完成,应该是 `while(t--) { ... }`。

7. 在 `memset()` 函数中,第三个参数应该是数组的大小,而不是数组本身。所以,`memset(map,'0',sizeof(map));` 应该是 `memset(map,'0',sizeof(map[0][0]) * n * m);`。

这些是你代码中的一些错误,你可以根据上面的指导进行修改。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 13:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表