和题解几乎一样结果爆零是为什么啊
  • 板块P1141 01迷宫
  • 楼主言舟
  • 当前回复6
  • 已保存回复6
  • 发布时间2021/9/25 15:46
  • 上次更新2023/11/4 05:41:31
查看原帖
和题解几乎一样结果爆零是为什么啊
160506
言舟楼主2021/9/25 15:46

参考题解:https://www.luogu.com.cn/blog/user49173/solution-p1141 我的代码真的就差不多只有变量名不同了,结果点1wa其他re

# include <iostream>
# include <cstdio>

using namespace std;
int n,m,flag[1005][1005],ans[100005],a[1005][1005],f,r,d;
int dx[5]={0,1,-1,0,0},dy[5]={0,0,0,1,-1};
struct node{
    int x,y;
}q[1000005];
int main () {
    freopen("P1141_1.in","r",stdin);
    int i,j,k,x,y,nx,ny;
    char c;
    cin >> n >> m;
    for (i=1;i<=n;i++) {
        c=getchar();
        for (j=1;j<=n;j++){
            c=getchar();
            a[i][j]=c-'0';
            if (a[i][j]==0)a[i][j]=-1;
        }
    }
    for ( i=1;i<=n;i++ )
    for ( j=1;j<=n;j++ ) {
        if(flag[i][j]==0){
            d++;
            f=r=1;
            flag[i][j]=d;
            q[f].x=i;q[f].y=j;
            while(f<=r) {
                for ( k=1;k<=4;k++ ) {
                    nx=q[f].x+dx[k];
                    ny=q[f].y+dy[k];
                    if (nx>=1&&nx<=n&&ny>=1&&ny<=n&&
                        a[q[f].x][q[f].y]+a[nx][ny]==0&&
                        flag[nx][ny]==0) {
                        r++;
                        q[r].x=nx;q[r].y=ny;
                        flag[nx][ny]=d;
                    }
                }
                f++;
            }
            ans[d]=r;
        }
    }
    for ( i=1;i<=m;i++ ) {
        cin>>x>>y;
        printf("%d\n",ans[flag[x][y]]);
    }

    return 0;
}
2021/9/25 15:46
加载中...