记录编号 409740 评测结果 AAAAAAAAAAAAAAAA
题目名称 [POI 1999] 位图 最终得分 100
用户昵称 GravatarHyoi_0Koto 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2017-05-28 21:32:29 内存使用 0.05 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
 
using namespace std;
 
const int MAX=183;
const int INF=0x7FFFFFFF;
const int dx[4]={0,0,-1,1},dy[4]={-1,1,0,0};
 
struct point
{
    int x,y;
};
 
int N,M,Head,Tail;
int dist[MAX][MAX],bit[MAX][MAX];
point Que[MAX*MAX];
 
void init()
{
    int i,j,c;
    freopen("bit.in","r",stdin);
    freopen("bit.out","w",stdout);
    scanf("%d%d",&N,&M);
    Head=0;Tail=-1;
    for (i=1;i<=N;i++)
    {
        for (j=1;j<=M;j++)
        {
            dist[i][j]=INF;
            c=getchar();
            while (c==10 || c==13) c=getchar();
            bit[i][j]=c-'0';
            if (c=='1')
            {
                Que[++Tail].x=i;
                Que[Tail].y=j;
                dist[i][j]=0;
            }
        }
    }
}
 
void BFS()
{
    point i,j;
    int k;
    while (Head<=Tail)
    {
        i=Que[Head++];
        for (k=0;k<4;k++)
        {
            j.x=i.x+dx[k]; j.y=i.y+dy[k];
            if (1<=j.x && j.x <=N && 1<=j.y && j.y<=M && dist[i.x][i.y]+1<dist[j.x][j.y])
            {
                dist[j.x][j.y]=dist[i.x][i.y]+1;
                Que[++Tail]=j;
            }
        }
    }
}
 
void print()
{
    int i,j;
    for (i=1;i<=N;i++)
    {
        for (j=1;j<=M;j++)
            printf("%d ",dist[i][j]);
        putchar('\n');
    }
}
 
int x()
{
    init();
    BFS();
    print();
    return 0;
}
int a=x();
int main(){;}