Cod sursa(job #2345857)

Utilizator mihaimodiMihai Modi mihaimodi Data 16 februarie 2019 19:26:36
Problema Castel Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <fstream>
#include <deque>
using namespace std;
int a[151][151];
bool viz[151][151];
bool valabil[22501];
int dx[]={0,1,0,-1,0},dy[]={0,0,1,0,-1};
int n,m,x,lin,col,sol;
ifstream fin("castel.in");
ofstream fout("castel.out");
struct que
{
    int l,c;
};
deque <que> q;
int camera(int l,int c)
{
    return m*(l-1)+c;
}
int verif(int x, int y)
{
    return x>0&&y>0&&x<=n&&y<=m&&viz[x][y]==0;
}
void coada(int ls,int cs)
{
    viz[ls][cs]=1;
    q.push_back({ls,cs});
    while(!q.empty())
    {
        int l=q.front().l;
        int c=q.front().c;
        for(int i=0;i<=4;i++)
        {
            int ln=l+dx[i];
            int cn=c+dy[i];
            if(valabil[a[ln][cn]]&&verif(ln,cn))
            {
                q.push_front({ln,cn});
                valabil[camera(ln,cn)]=1;
                viz[ln][cn]=1;
            }
            else if(verif(ln,cn))
                q.push_back({ln,cn});
        }
        q.pop_front();
    }

}
int main()
{
    fin>>n>>m>>x;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            fin>>a[i][j];
    col=x%m;
    if(col==0)
        col=m;
    lin=1+(x-col)%m;
    valabil[x]=1;

    coada(lin,col);

    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            sol+=viz[i][j];
    fout<<sol;
    return 0;
}