记录编号 |
68829 |
评测结果 |
AAAAAAAAAAAAAAAA |
题目名称 |
[POI 1999] 位图 |
最终得分 |
100 |
用户昵称 |
raywzy |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.057 s |
提交时间 |
2013-08-30 15:59:12 |
内存使用 |
0.55 MiB |
显示代码纯文本
#include<fstream>
#include<deque>
#include<string>
using namespace std;
ifstream fin("bit.in");
ofstream fout("bit.out");
int a[183][183];
int b[183][183];
bool c[183][183]={0};
int n,m;
class woca
{
public:
int x;
int y;
};
deque<woca>q;
void floodfill()
{
woca s,k;
while(!q.empty())
{
s=q.at(0);
q.pop_front();
if(s.x+1<=n&&a[s.x+1][s.y]==0&&c[s.x+1][s.y]==0)
{
c[s.x+1][s.y]=1;
b[s.x+1][s.y]=b[s.x][s.y]+1;
k.x=s.x+1;
k.y=s.y;
q.push_back(k);
}
if(s.x-1>=1&&a[s.x-1][s.y]==0&&c[s.x-1][s.y]==0)
{
c[s.x-1][s.y]=1;
b[s.x-1][s.y]=b[s.x][s.y]+1;
k.x=s.x-1;
k.y=s.y;
q.push_back(k);
}
if(s.y+1<=m&&a[s.x][s.y+1]==0&&c[s.x][s.y+1]==0)
{
c[s.x][s.y+1]=1;
b[s.x][s.y+1]=b[s.x][s.y]+1;
k.x=s.x;
k.y=s.y+1;
q.push_back(k);
}
if(s.y-1>=1&&a[s.x][s.y-1]==0&&c[s.x][s.y-1]==0)
{
c[s.x][s.y-1]=1;
b[s.x][s.y-1]=b[s.x][s.y]+1;
k.x=s.x;
k.y=s.y-1;
q.push_back(k);
}
}
}
int main()
{
fin>>n>>m;
int i,j;
woca flag;
string OX;
for(i=1;i<=n;i++)
{
fin>>OX;
for(j=0;j<=m-1;j++)
{
a[i][j+1]=int(OX[j])-48;
if(a[i][j+1]==1)
{
flag.x=i;
flag.y=j+1;
q.push_back(flag);
b[i][j+1]=0;
c[i][j+1]=1;
}
}
}
//////////////////
floodfill();
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
fout<<b[i][j]<<' ';
fout<<endl;
}
return 0;
}