yueyufeng 发表于 2024-4-4 10:57:51

哪里错了

#include<bits/stdc++.h>
using namespace std;
char map;
int ans;
int n,m;
bool sea;
bool land;
queue<pair<int,int>>q;
int dx1={-1,-1,0,1,1,1,0,-1};
int dy1={0,1,1,1,0,-1,-1,-1};
int dx2={-1,0,1,0};
int dy2={0,1,0,-1};
void dfs(int x,int y){
    for(int i=0;i<4;i++){
      int xx=x+dx2;
      int yy=y+dy2;
      if(xx<1||yy<1||xx>n||yy>m)
      continue;
      if(map=='0')
      continue;
      if(!land&&map=='1'){
          land=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;
            int yy=y+dy1;
            if(xx<0||yy<0||xx>n+1||yy>m+1)
            continue;
            if(map=='1'&&!land){
            land=true;
            ans++;
            dfs(xx,yy);
            }
            if(sea)
            continue;
            if(map=='1')
            continue;
            sea=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;
       }
   }
   sea=true;
   bfs(0,0);
}
return 0;
}

FishC 发表于 2024-4-4 10:58:06

在你的代码中有几个问题:

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

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

3. 在 `bfs()` 函数中,`if(map=='0')` 的条件判断是错误的。因为 `map` 是一个字符数组,应该使用单引号来表示字符。所以应该是 `if(map=='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) * n * m);`。

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 哪里错了