Cod sursa(job #1641890)

Utilizator ASTELOTudor Enescu ASTELO Data 9 martie 2016 11:30:49
Problema Castel Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.96 kb
#include<cstdio>
using namespace std;
struct eu{int x,y;};
eu v[225001];
int i,j,n,m,a[151][151],k,b[151][151],nr=0,x,y,c[151][151];
bool chei[250001];
int linie[]={1,0,-1,0};
int coloana[]={0,-1,0,1};
int main ()
{
freopen("castel.in","r",stdin);
freopen("castel.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
        {
        nr++;
        b[i][j]=nr;
        scanf("%d",&a[i][j]);
        if(nr==k)
            {
            x=i;
            y=j;
            }
        }
chei[k]=1;
int pp=0;
while(pp==0)
    {
    c[x][y]=1;
    chei[b[x][y]]=1;
    int in,sf;
    v[1].x=x;
    v[1].y=y;
    in=1;
    sf=1;
    while(in<=sf)
        {
        int lc,cc,co;
        for(co=0;co<4;co++)
            {
            lc=v[in].x+linie[co];
            cc=v[in].y+coloana[co];
            if(lc>=1&&lc<=n&&cc>=1&&cc<=n&&chei[b[lc][cc]]==0&&chei[a[lc][cc]]==1)
                {
                sf++;
                chei[b[lc][cc]]=1;
                chei[a[lc][cc]]=1;
                c[lc][cc]=1;
                v[sf].x=lc;
                v[sf].y=cc;
                }
            }
        in++;
        }
    pp=1;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            if(c[i][j]==1)
                {
                int co,lc,cc;
                for(co=0;co<4;co++)
                    {
                    lc=i+linie[co];
                    cc=j+coloana[co];
                    if(lc>=1&&lc<=n&&cc>=1&&cc<=n&&chei[b[lc][cc]]==0&&chei[a[lc][cc]]==1&&c[lc][cc]==0)
                        {
                        pp=0;
                        x=lc;
                        y=cc;
                        i=n;
                        j=m;
                        break;
                        }
                    }
                }
    }
int nr1=0;
for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
        if(c[i][j]==1)
            nr1++;
printf("%d",nr1);
return 0;
}