Cod sursa(job #2224497)

Utilizator alex2209alexPavel Alexandru alex2209alex Data 24 iulie 2018 11:41:33
Problema Castel Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.98 kb
#include <fstream>
#include <queue>
using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");
pair<int,int>x;
queue<pair<int,int> >dq;
int n,m,k,i,j,l[30000],c[30000],v[151][151],r,v2[151][151],v3[151][151],nr,chei[30000];
int main()
{
    f>>n>>m>>k;
    nr=1;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            v[i][j]=nr;
            if(v[i][j]==k)
            {
                x=make_pair(i,j);
                chei[k]=1;
                dq.push(x);
            }
            nr++;
            f>>v2[i][j];
        }
    }
    r=1;
    while(!dq.empty() && r==1)
    {
        nr=0;
        r=0;
        while(!dq.empty())
        {
            l[++nr]=dq.front().first;
            c[nr]=dq.front().second;
            v3[l[nr]][c[nr]]=1;
            chei[v[l[nr]][c[nr]]]=1;
            dq.pop();
        }
        for(i=1;i<=nr;i++)
        {
            if(l[i]>1 && chei[v2[l[i]-1][c[i]]]==1 && v3[l[i]-1][c[i]]==0)
            {
                x=make_pair(l[i]-1,c[i]);
                dq.push(x);
                r=1;
            }
            if(l[i]<n && chei[v2[l[i]+1][c[i]]]==1 && v3[l[i]+1][c[i]]==0)
            {
                x=make_pair(l[i]+1,c[i]);
                dq.push(x);
                r=1;
            }
            if(c[i]>1 && chei[v2[l[i]][c[i]-1]]==1 && v3[l[i]][c[i]-1]==0)
            {
                x=make_pair(l[i],c[i]-1);
                dq.push(x);
                r=1;
            }
            if(c[i]<m && chei[v2[l[i]][c[i]+1]]==1 && v3[l[i]][c[i]+1]==0)
            {
                x=make_pair(l[i],c[i]+1);
                dq.push(x);
                r=1;
            }
            x=make_pair(l[i],c[i]);
            dq.push(x);
        }
    }
    nr=0;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(v3[i][j]==1)
            {
                nr++;
            }
        }
    }
    g<<nr<<'\n';
    return 0;
}