Cod sursa(job #2684271)

Utilizator AndreiCroitoruAndrei Croitoru AndreiCroitoru Data 13 decembrie 2020 14:12:03
Problema Castel Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <fstream>
#include <queue>
#include <map>
using namespace std;
ifstream in("castel.in");
ofstream out("castel.out");
int dx[]= {-1,0,1,0};
int dy[]= {0,1,0,-1};
bool ver[151][151];
int ma[151][151];
pair<int,int> q[22501];
/*void lee(int x,int y)
{
    ver[x][y]=1;
    while(!q.empty())
    {
        int lin=q.front().x;
        int col=q.front().y;
        for(d=0; d<4; d++)
        {
            if(lin + dx[d]<=n && lin + dx[d]>=1 && col + dy[d]<=m && col + dy>=1 && ver[lin+dx[d]][col+dy[d]]!=0)
            {
                q.push({lin+dx[d], col+dy[d});
            }
            else if(lin + dx[d]<=n && lin + dx[d]>=1 && col + dy[d]<=m && col + dy>=1 && ver[lin+dx[d]][col+dy[d]]==0)
            {
                lee(lin+dx[d], col+dy[d
            });
        }
    }
    q.pop();
}*/
int m,n;
inline pair <int,int>bam(int x)
{
    if(x%m==0)
    {
        return {x/m,m};
    }
    else
    {
        return {x/m+1,x%m};
    }
}
bool cheie[22501];
int main()
{
    int k,i,j;
    in>>n>>m>>k;
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=m; j++)
        {
            in>>ma[i][j];
        }
    }
    cheie[k]=1;
    int cnt=0;
    q[++cnt] = bam(k);
    ver[q[1].first][q[1].second]=1;
    bool ok;
    ok=1;
    do
    {
        ok=1;
        for(int st=1; st<=cnt; st++)
        {
            i=q[st].first;
            j=q[st].second;
            for(int k=0; k<4; k++)
            {
                int ii=i+dx[k];
                int jj=j+dy[k];
                if(cheie[ma[ii][jj]]!=0 && ver[ii][jj]==0)
                {
                    ok=0;
                    cheie[ii*m-m+jj]=1;
                    q[++cnt]= {ii,jj};
                    ver[ii][jj]=1;
                }
            }
        }
    } while(!ok);
    out<<cnt;
    return 0;
}