Cod sursa(job #2179334)

Utilizator DavidDragulinDragulin David DavidDragulin Data 20 martie 2018 09:49:51
Problema Castel Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <bits/stdc++.h>
#define pb push
using namespace std;
ifstream fin("castel.in");
ofstream fout("castel.out");
int n,m,i,j,k,p,v[150*150+9],l[159][150*150],x,u[150*150+9],nr;
queue <int> q;
int main()
{
    fin>>m>>n>>k;
    int vs[]= {-n,1,n,-1};
    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
            fin>>v[++p];
    for(i=1; i<=n*m; i++)
        for(j=0; j<4; j++)
            if(i+vs[j]>0&&i+vs[j]<=n*m&&v[i+vs[j]]==i)
                l[i][++l[i][0]]=i+vs[j];

    q.pb(k);
    u[1]=1;
    while(!q.empty())
    {
        x=q.front();
        q.pop();
        for(i=1; i<=l[x][0]; i++)
        {
            u[l[x][i]]=1;
            q.pb(l[x][i]);
        }
        for(i=0; i<4; i++)
            if(x+vs[i]>0&&u[x+vs[i]]==0&&u[v[x+vs[i]]]==1)
            {
                u[x+vs[i]]=1;
                q.pb(x+vs[i]);
                l[v[x+vs[i]]][++l[v[x+vs[i]]][0]]=x+vs[i];
            }
    }
    for(i=1;i<=n*m;i++)
        if(u[i]==1)
            nr++;
    fout<<nr;
    return 0;
}