Cod sursa(job #930146)

Utilizator tudgal1001Profir Tudor tudgal1001 Data 27 martie 2013 14:30:47
Problema Castel Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include<fstream>
#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;

ifstream f("castel.in");
ofstream g("castel.out");

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;
    int size=1,ok,cont=0,dir;
    f>>m>>n>>k;
    acc.push_back(k);
    viz[k]=1;
    for (i=1; i<=m; i++)
        for (j=1; j<=n; j++)
            f>>ch[i][j];
    ok=1;
    while (ok)
    {
        ok=0;
        for (i=0; i<size; 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)), size++;
                }
        }
    }
    for (i=1; i<=m*n; i++)
        if (viz[i])
            cont++;
    g<<cont<<"\n";
    return 0;
}