Cod sursa(job #2178961)

Utilizator PopeangaMihneaPopeanga Mihnea- Stefan PopeangaMihnea Data 19 martie 2018 20:52:13
Problema Castel Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <bits/stdc++.h>

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

struct pos
{
    int l, c;
};
pos v[22505];
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;
    int k=0;
    v[++k]=p;
    cheie[poz[x][y]]=1;
    viz[x][y]=1;
    bool ok=1;
    while(ok)
    {
        ok=0;
        for(int i=1; i<=k; ++i)
        {
            for(int d=0; d<4; ++d)
            {
                lv=v[i].l+dx[d];
                cv=v[i].c+dy[d];
                if(inside(lv, cv))
                {
                    if(cheie[a[lv][cv]])
                    {
                        if(!viz[lv][cv])
                        {
                            ok=1;
                            ++sol;
                            viz[lv][cv]=1;
                            cheie[poz[lv][cv]]=1;
                            q.l=lv; q.c=cv;
                            v[++k]=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;
    pos p;
    p.l=1; p.c=1;
    lee(ii, jj);
    fout<<sol<<"\n";
    return 0;
}