Cod sursa(job #3138603)

Utilizator Luca_georgescuLucageorgescu Luca_georgescu Data 20 iunie 2023 16:09:01
Problema Kdrum Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("pescari.in");
ofstream g("pescari.out");

int n,i,j,a[1005][1005],x,b[1005][10005],y,m,p;
const int di[]={-1,-1,0,1,1,1,0,-1};
const int dj[]={0,1,1,1,0,-1,-1,-1};

queue< pair<int, int> > q;
char c;

bool ok(int i, int j)
{
    if ( i<=0 || j<=0 || i>n || j>m )
        return false;
    return true;
}

void lee()
{
    while( !q.empty() )
    {
        int i=q.front().first;
        int j=q.front().second;
        q.pop();
        for(int k=0; k<8; k++ )
        {
            x=i+di[k];
            y=j+dj[k];
            if ( ok(x,y) && a[x][y]!=2 && b[x][y]>b[i][j]+1 )
            {
                b[x][y]=b[i][j]+1;
                q.push({x,y});
            }
        }
    }
}

int main()
{
    f >> n >> m >> p;
    for ( i=1; i<=n; i++ )
    {
        for ( j=1; j<=m; j++ )
        {
            f >> a[i][j];
            b[i][j]=100000005;
            if ( a[i][j]==2 )
            {
                q.push({i,j});
                b[i][j]=0;
            }
        }
    }
    lee();
    for (int i=1; i<=n; i++ )
        for (int j=1; j<=m; j++ )
           if ( a[i][j]==1 )
              g << b[i][j] << '\n';
    return 0;
}