Cod sursa(job #2178029)

Utilizator PopeangaMihneaPopeanga Mihnea- Stefan PopeangaMihnea Data 18 martie 2018 23:50:40
Problema Castel Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.96 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("castel.in");
ofstream fout("castel.out");

struct pos
{
    int l, c;
};
queue<pos>coada;
int dx[]={-1, 0, 1, 0};
int dy[]={0, 1, 0, -1};
int a[151][151], poz[151][151];
int n, m, k, sol, ii, jj;
bool cheie[22505];
bool viz[151][151];

inline bool inside(int l, int c)
{
    if(l<=0 || l>n || c<=0 || c>m) return 0;
    return 1;
}

void lee(int x, int y)
{
    pos p, q;
    int lv, cv;
    p.l=x; p.c=y;
    coada.push(p);
    cheie[poz[x][y]]=1;
    while(!coada.empty())
    {
        p=coada.front();
        coada.pop();
        for(int d=0; d<4; ++d)
        {
            lv=p.l+dx[d];
            cv=p.c+dy[d];
            if(inside(lv, cv))
            {
                if(cheie[a[lv][cv]])
                {
                    if(!viz[lv][cv])
                    {
                        ++sol;
                        viz[lv][cv]=1;
                        q.l=lv; q.c=cv;
                        cheie[poz[lv][cv]]=1;
                        coada.push(q);
                    }
                }
            }
        }
        for(int d=0; d<4; ++d)
        {
            lv=p.l+dx[d];
            cv=p.c+dy[d];
            if(inside(lv, cv))
            {
                if(cheie[a[lv][cv]])
                {
                    if(!viz[lv][cv])
                    {
                        ++sol;
                        viz[lv][cv]=1;
                        q.l=lv; q.c=cv;
                        cheie[poz[lv][cv]]=1;
                        coada.push(q);
                    }
                }
            }
        }
    }
}

int main()
{
    fin>>n>>m>>k;
    int cam=0;
    for(int i=1; i<=n; ++i)
    {
        for(int j=1; j<=m; ++j)
        {
            fin>>a[i][j];
            poz[i][j]=++cam;
            if(poz[i][j]==k) ii=i, jj=j;
        }
    }
    sol=1;
    lee(ii, jj);
    fout<<sol<<"\n";
    return 0;
}