Cod sursa(job #1221046)

Utilizator bogdanboboc97Bogdan Boboc bogdanboboc97 Data 19 august 2014 12:29:10
Problema Castel Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
#define M 152

using namespace std;

ifstream cin("castel.in");
ofstream cout("castel.out");

int a[M][M],b[M][M],i,j,n,m,p,p1,p2,v[M],q,nr,cc[M];
int x[]={0,0,1,0,-1};
int y[]={0,-1,0,1,0};
struct abc{
    int l,c;
}r[M*M];
bool z[M][M];

void bfs(int i,int j);

void searchkey(int x)
{
    cc[b[i][j]]=0;
    for(int t=0;t<q;t++)
    if(a[r[t].l][r[t].c]==x)
    bfs(r[t].l,r[t].c);
}

void bfs(int i,int j)
{
    v[b[i][j]]=1;
    if(z[i][j]==false)nr++,z[i][j]=true;
    if(cc[b[i][j]]==1)searchkey(b[i][j]);
    for(int k=1;k<=4;k++)
    if(i+x[k]<=n && i+x[k]>0 && j+y[k]<=m && j+y[k]>0 && z[i+x[k]][j+y[k]]==false && v[a[i+x[k]][j+y[k]]])bfs(i+x[k],j+y[k]);
    else if(i+x[k]<=n && i+x[k]>0 && j+y[k]<=m && j+y[k]>0 && z[i+x[k]][j+y[k]]==false && !v[a[i+x[k]][j+y[k]]])
        r[q].l=i+x[k],
        r[q].c=j+y[k],
        cc[a[r[q].l][r[q].c]]=1,
        q++;
}

int main(void)
{
    cin>>n>>m>>p;
    for(i=q=1;i<=n;i++)
    for(j=1;j<=m;j++,q++)
    {
        cin>>a[i][j];
        b[i][j]=q;
        if(q==p)p1=i,p2=j;
    }
    q=0;
    bfs(p1,p2);
    cout<<nr;
    return 0;
}