我wh 2021-11-06 19:09 采纳率: 100%
浏览 39
已结题

这道c++的题,我不知道错那,帮我来看看。

题目:题意:有一块N×M的土地,雨后积起了水,有水标记为‘W’,干燥为‘.’。八连通的积水被认为是连接在一起的。请求出院子里共有多少水洼?




```#include<bits/stdc++.h>
using namespace std;
int n,m;
char a[1001][1001];
int dx[8]={0,1,0,-1,-1,1,-1,1};
int dy[8]={1,0,-1,0,-1,-1,1,1}; 
int q[1000001][3];
int cnt;
void bfs(int x,int y)
{
    int h,t;
    h==t==1;
    q[t][1]=x;
    q[t][2]=y;
    a[x][y]='.';
    while(h<=t)
    {
        for(int i=0;i<8;i++)
        {
            int nx=q[h][1]+dx[i];
            int ny=q[h][2]+dy[i];
            if(a[nx][ny]=='W')
            {
                t++;
                q[t][1]=nx;
                q[t][2]=ny;
                a[nx][ny]='.';
            }
        }
        h++;
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin>>n>>m;
    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')
            {
                cnt++;
                bfs(i,j);
            }
        }
    }
    cout<<cnt<<endl;
    return 0;
}
  • 写回答

2条回答 默认 最新

  • 六年级初中生 2021-11-06 19:15
    关注

    离谱,刚刚做完这道题,我把代码给你看吧,你自己看看看哪里错了

    #include<bits/stdc++.h>
    using namespace std;
    
    int a[121][121];
    bool vst[121][121];
    int n, m;
    struct node{int x; int y;};
    
    int dx[8] = {1, -1, 0, 0, 1, 1, -1, -1};
    int dy[8] = {0, 0, 1, -1, 1, -1, 1, -1};
    
    void bfs(int x, int y) {
        queue<node>q;
        q.push({x, y});
        vst[x][y] = true;
        while (q.size()) {
            node ft = q.front();
            q.pop();
            
            for (int i = 0; i < 8; ++i) {
                int xx = ft.x + dx[i];
                int yy = ft.y + dy[i];
                
                if (a[xx][yy] == 0) continue;
                if (xx < 1 || xx > n || yy < 1 || yy > m) continue;
                if (vst[xx][yy]) continue;
            //    cout << xx << " " << yy << endl;
                vst[xx][yy] = true;
                q.push({xx, yy});
            }
        } 
    }
    
    int main(){
        cin >> n >> m;
        for (int i = 1; i <= n; ++i) {
            for (int j = 1; j <= m; ++j) {
                char c;
                cin >> c;
                if (c == 'W') a[i][j] = 1;
                else a[i][j] = 0;
            }
        }
        
        int cnt = 0;
        for (int i = 1; i <= n; ++i) {
            for (int j = 1; j <= m; ++j) {
                if (!vst[i][j] && a[i][j] == 1) {
                    ++cnt;
                    bfs(i, j);
                }
            }
        }
        
    //    for (int i = 1; i <= n; ++i) {
    //        for (int j = 1; j <= m; ++j) {
    //            cout << vst[i][j];
    //        }
    //        cout << endl;
    //    }
        
        cout << cnt << endl;
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月22日
  • 已采纳回答 11月14日
  • 创建了问题 11月6日

悬赏问题

  • ¥15 ghpython这里总是报错而且rhino视图窗口内不显示怎么办
  • ¥15 布尔运算推导,请证明
  • ¥15 有没有人会打学生成绩管理系统呀
  • ¥15 在使用Fiddler和夜神模拟器抓包的时候一直出现443该怎么办啊QAQ搜了好几个笔记都没有解决
  • ¥15 3x7的二维数组A、B、C,A中的任意1个数组元素与B的任意1个数组元素、同时又与C的任意1个数组元素比较,把不同位置出现相同数的比较称为无意义,反之称为有意义,把有意义的比较打印输出。
  • ¥20 预测模型怎么处理原始数据(随机森林)
  • ¥20 请问discuz3.5如何实现插入ckplayer全能播放器功能呢?
  • ¥15 thingsboard代码编译出错误
  • ¥15 博途v18仿真报错怎么解决
  • ¥15 欧姆龙plc枕式包装机 ST编程