xiaonanu 2024-02-28 21:45 采纳率: 0%
浏览 3
已结题

c++ WA求调THX

CF1063B#40WA


```c++
#include<bits/stdc++.h>
using namespace std;
struct node
{
    int x,y,r,c;
};
int n,m,r,c,x,y,ans;
char a[2005][2005];
bool b[2005][2005];
string s;
queue<node>q;
signed main()
{
    cin>>n>>m>>r>>c>>x>>y;
    for(int i=1;i<=n;i++)
    {
        cin>>s;
        for(int j=1;j<=m;j++)
            a[i][j]=s[j-1];        
    }
    q.push({x,y,r,c});
    b[r][c]=1;
    while(!q.empty())
    {
        int x=q.front().x,y=q.front().y,r=q.front().r,c=q.front().c;
        if(r>1&&a[r-1][c]=='.'&&b[r-1][c]==0)q.push({x,y,r-1,c}),b[r-1][c]=1;
        if(r<n&&a[r+1][c]=='.'&&b[r+1][c]==0)q.push({x,y,r+1,c}),b[r+1][c]=1;
        if(c<m&&y>0&&a[r][c+1]=='.'&&b[r][c+1]==0)q.push({x,y-1,r,c+1}),b[r][c+1]=1;
        if(c>1&&x>0&&a[r][c-1]=='.'&&b[r][c-1]==0)q.push({x-1,y,r,c-1}),b[r][c-1]=1;
        q.pop();
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
            if(b[i][j])ans++;
    }    
    cout<<ans;
}

```

  • 写回答

2条回答 默认 最新

  • 关注

    xiaonanu 晚上好🌙🌙🌙
    本答案参考通义千问

    你的代码在 CF1063B#40 题目中出现 WA(Wrong Answer)是因为你在判断节点是否可以移动时,没有正确处理边界条件。具体来说,当 rc 边界值为 1 或者 nm 时,你的代码没有正确检查邻接的节点是否在棋盘范围内。

    问题出在以下这几行:

    if(r>1&&a[r-1][c]=='.'&&b[r-1][c]==0)q.push({x,y,r-1,c}),b[r-1][c]=1;
    if(r<n&&a[r+1][c]=='.'&&b[r+1][c]==0)q.push({x,y,r+1,c}),b[r+1][c]=1;
    if(c<m&&y>0&&a[r][c+1]=='.'&&b[r][c+1]==0)q.push({x,y-1,r,c+1}),b[r][c+1]=1;
    if(c>1&&x>0&&a[r][c-1]=='.'&&b[r][c-1]==0)q.push({x-1,y,r,c-1}),b[r][c-1]=1;
    

    修复方案:

    1. 检查 rc 是否在合法范围内:
      • 在移动之前,添加对 rc 的边界检查,确保它们在 1 到 n 和 1 到 m 范围内。

    修复后的代码如下:

    if (r > 0 && r <= n && c > 0 && c <= m && a[r-1][c] == '.' && b[r-1][c] == 0)
        q.push({x, y, r-1, c}), b[r-1][c] = 1;
    
    if (r < n && r >= 1 && c > 0 && c <= m && a[r+1][c] == '.' && b[r+1][c] == 0)
        q.push({x, y, r+1, c}), b[r+1][c] = 1;
    
    if (r > 0 && r <= n && c < m && y > 0 && a[r][c+1] == '.' && b[r][c+1] == 0)
        q.push({x, y-1, r, c+1}), b[r][c+1] = 1;
    
    if (r > 0 && r <= n && c > 0 && c >= 1 && a[r][c-1] == '.' && b[r][c-1] == 0)
        q.push({x-1, y, r, c-1}), b[r][c-1] = 1;
    

    这样,你的代码应该能够正确地遍历所有可到达的节点,并且不会因为边界条件错误而导致 WA。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月2日
  • 创建了问题 2月28日

悬赏问题

  • ¥15 无源定位系统的时差估计误差标准差
  • ¥15 请问这个代码哪里有问题啊
  • ¥20 python--version在命令端输入结果Python is not defined怎么办?还有pip不是exe格式是不是没安装成功?
  • ¥15 通过GaussianView进行结构微调消除虚频
  • ¥15 调用transformers库
  • ¥15 由于导出的数据名字中带有/,导致Matlab打不开,怎么办?
  • ¥15 新硬盘安装的程序总是崩溃,提示遇到错误
  • ¥15 openpcdet自制数据集评估bev精度和3d精度相同
  • ¥15 excel 上下按钮 显示行
  • ¥20 云卓h12pro 数传问题