获得Spoj BITMAP的WA

时间:2016-09-27 08:56:30

标签: bitmap

我正在尝试解决以下问题:http://www.spoj.com/problems/BITMAP/我使用了多源BFS方法来解决问题。但我继续得到西澳大利亚州。我再次尝试从头开始编码,但没有发现问题。这是我的代码`

    #include <iostream>
#include<queue>
 using namespace std;
struct node{
    int i,j;
};
int main() {
    int t;
    cin>>t;
    while(t--){
        queue<node> q;
        int m,n,i,j;
        cin>>m>>n;
         string a[m+1];int b[m+1][n+1];
        for(i=0;i<m;i++)
        cin>>a[i];
        for(i=0;i<m;i++)
        for(j=0;j<n;j++)
        if(a[i][j]=='1')
        {
            node temp;
            temp.i=i;
            temp.j=j;
            q.push(temp);
            b[i][j]=0;
        }
        while(!q.empty()){
            node temp=q.front();
            i=temp.i;j=temp.j;
            q.pop();
            if(i<m-1&&a[i+1][j]=='0'){
                node a1;
            a[i+1][j]=(b[i][j]+1)+48;
            b[i+1][j]=b[i][j]+1;
                a1.i=i+1;a1.j=j;
                q.push(a1);
            }
            if(i>0&&a[i-1][j]=='0'){
                node b1;
                a[i-1][j]=(b[i][j]+1)+48;
            b[i-1][j]=b[i][j]+1;
                 b1.i=i-1;b1.j=j;
                q.push(b1);
            }
            if(j>0&&a[i][j-1]=='0'){
                node c;
                a[i][j-1]=(b[i][j]+1)+48;
            b[i][j-1]=b[i][j]+1;
                 c.i=i;c.j=j-1;
                q.push(c);
            }
            if(j<n-1&&a[i][j+1]=='0'){
                node d;
                a[i][j+1]=(b[i][j]+1)+48;
            b[i][j+1]=b[i][j]+1;
                 d.i=i;d.j=j+1;
                q.push(d);
            }
        }
        for(i=0;i<m;i++){
        for(j=0;j<n;j++){
        cout<<b[i][j];
            if(j!=n-1)
            cout<<" ";
        }
            cout<<endl;
        }



    }
return 0;
}

1 个答案:

答案 0 :(得分:0)

您为a[i+1][j]=(b[i][j]+1)+48;

获得 WA

可能(b[i][j]+1)+48=304,因为字符限制(0到255)所以304类似于char类型变量的48(&#39; 0&#39;)。因此,b[i][j]可以稍后在bfs中更新。