我正在尝试解决以下问题: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;
}
答案 0 :(得分:0)
您为a[i+1][j]=(b[i][j]+1)+48;
可能(b[i][j]+1)+48=304
,因为字符限制(0到255)所以304类似于char类型变量的48(&#39; 0&#39;)。因此,b[i][j]
可以稍后在bfs中更新。