Cod sursa(job #930131)

Utilizator tudgal1001Profir Tudor tudgal1001 Data 27 martie 2013 14:19:12
Problema Castel Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<cstdio>
#include<vector>
#define NMax 155
using namespace std;

int viz[NMax*NMax];
int m,n,ch[NMax][NMax];
int px[]={0,0,1,-1}, py[]={1,-1,0,0};
vector<int> acc;

int coord_x (int nr)
{
    return (nr-1)/n+1;
}

int coord_y (int nr)
{
    return (nr-1)%n+1;
}

int numar (int x, int y)
{
    return (x-1)*n+y;
}

int check (int x, int y)
{
    if (x<1 || x>m)
        return 0;
    if (y<1 || y>n)
        return 0;
    return 1;
}

int main ()
{
    int k,i,j,cx,cy,x,y,ok,lg,cont=0,dir;
    freopen("castel.in","r",stdin);
    freopen("castel.out","w",stdout);
    scanf("%d%d%d",&m,&n,&k);
    acc.push_back(k);
    viz[k]=1;
    for (i=1; i<=m; i++)
        for (j=1; j<=n; j++)
            scanf("%d",&ch[i][j]);
    ok=1;
    while (ok)
    {
        ok=0;
        lg=acc.size();
        for (i=0; i<lg; i++)
        {
            cx=coord_x(acc[i]);
            cy=coord_y(acc[i]);
            for (dir=0; dir<4; dir++)
                if (check(cx+px[dir],cy+py[dir]))
                {
                    x=cx+px[dir], y=cy+py[dir];
                    if (!viz[numar(x,y)] && viz[ch[x][y]])
                        viz[numar(x,y)]=1, ok=1, acc.push_back(numar(x,y));
                }
        }
    }
    for (i=1; i<=m*n; i++)
        if (viz[i])
            cont++;
    printf("%d\n",cont);
    return 0;
}