比赛 |
2008haoi模拟训练3 |
评测结果 |
AAAATTTTTT |
题目名称 |
位图 |
最终得分 |
40 |
用户昵称 |
zqzas |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2008-04-24 11:24:42 |
显示代码纯文本
#include <stdio.h>
#include <math.h>
#define maxn 190
#define inf 30000
int n,m,now,s[maxn][maxn],bit1_x[maxn*maxn],bit1_y[maxn*maxn];
FILE *f1,*f2;
void run(void)
{
int k,i,j,p;
for (k=0;k<now;k++)
for (i=0;i<n;i++)
for (j=0;j<m;j++)
{
if (s[i][j]==1 || s[i][j]==0)
continue;
p=(int)fabs((double)bit1_x[k]-i)+fabs((double)bit1_y[k]-j);
if (s[i][j]>p)
s[i][j]=p;
}
}
void ini(void)
{
int i,j;
char c;
fscanf(f1,"%d%d\n",&n,&m);
for (i=0;i<n;i++)
{
for (j=0;j<m;j++)
{
fscanf(f1,"%c",&c);
s[i][j]=c-48;
if (s[i][j]==1)
{
s[i][j]=0;
bit1_x[now]=i;
bit1_y[now]=j;
now++;
}
else
{
s[i][j]=inf;
}
}
fscanf(f1,"\n");
}
for (i=0;i<now;i++)
{
if (s[bit1_x[i]-1][bit1_y[i]]!=0)
s[bit1_x[i]-1][bit1_y[i]]=1;
if (s[bit1_x[i]][bit1_y[i]-1]!=0)
s[bit1_x[i]][bit1_y[i]-1]=1;
if (s[bit1_x[i]+1][bit1_y[i]]!=0)
s[bit1_x[i]+1][bit1_y[i]]=1;
if (s[bit1_x[i]][bit1_y[i]+1]!=0)
s[bit1_x[i]][bit1_y[i]+1]=1;
}
}
int main(void)
{
int i,j;
f1=fopen("bit.in","r");
f2=fopen("bit.out","w");
ini();
run();
for (i=0;i<n;i++)
{
for (j=0;j<m-1;j++)
fprintf(f2,"%d ",s[i][j]);
fprintf(f2,"%d\n",s[i][m-1]);
}
fclose(f1);fclose(f2);
return 0;
}