记录编号 |
532242 |
评测结果 |
ATTTTTTTTTTTTTTA |
题目名称 |
[POI 1999] 位图 |
最终得分 |
12 |
用户昵称 |
欧鹰123 |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
14.082 s |
提交时间 |
2019-05-25 18:21:28 |
内存使用 |
13.92 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m,t,f[183][183],xj[4]={1,-1,0,0},yj[4]={0,0,1,-1},a[183][183],x[183],y[183],cnt;
void dfs(int x,int y)
{
if(t==n*m)
{
return;
}
for(int i=0;i<4;i++)
{
int xi=x+xj[i];
int yi=y+yj[i];
if(xi>=1&&xi<=m&&yi>=1&&yi<=n)
{
f[xi][yi]=min(f[xi][yi],f[x][y]+1);
t++;
dfs(xi,yi);
t--;
}
}
}
int main()
{
freopen("bit.in","r",stdin);
freopen("bit.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
char ta;
cin>>ta;
f[j][i]=20148598;
a[i][j]=ta-'0';
if(a[i][j]==1)
{
f[j][i]=0;
x[++cnt]=j,y[cnt]=i;
}
}
}
for(int i=1;i<=cnt;i++)
{
dfs(x[i],y[i]);
t=0;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cout<<f[j][i]<<" ";
}
cout<<endl;
}
return 0;
}