Cod sursa(job #1602640)

Utilizator Julian.FMI Caluian Iulian Julian. Data 16 februarie 2016 20:57:04
Problema Castel Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <iostream>
#include <fstream>
#define nmax 160
using namespace std;
ifstream fin("castel.in");
ofstream fout("castel.out");
int n,m;
int a[nmax][nmax];
int viz[nmax][nmax];
int uz[nmax][nmax];
int qx[nmax*nmax],qy[nmax*nmax];
int dx[]={0,1,0,-1},dy[]={-1,0,1,0};
void conv(int val,int &x,int &y)
{x=(val-1)/m + 1;
 y=(val-1)%m + 1;
}


int main()
{int start,sx,sy,i,j;
    fin>>n>>m;
    fin>>start;
    conv(start,sx,sy);
    viz[sx][sy]=1;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        fin>>a[i][j];
for(i=0;i<=n+1;i++)
    uz[i][0]=uz[m+1][0]=1;
for(j=0;j<=m+1;j++)
    uz[0][i]=uz[0][n+1]=1;


int k,in,sf,pux,puy,ajx,ajy,px,py,rezultat=1,ok=1;
viz[sx][sy]=1;
while(ok)
{in=sf=0;
ok=0;
qx[in]=sx;
qy[in]=sy;
for(i=1;i<=n;i++)for(j=1;j<=m;j++)uz[i][j]=0;
uz[sx][sy]=1;
    while(in<=sf)
    {pux=qx[in];puy=qy[in++];
        for(k=0;k<4;k++)
        {px=pux+dx[k];py=puy+dy[k];
            if(!uz[px][py])
            {conv(a[px][py],ajx,ajy);
                if(viz[ajx][ajy])
                {uz[px][py]=1;
                 if(!viz[px][py]){viz[px][py]=1;ok=1;rezultat++;
                 }
                 qx[++sf]=px;
                 qy[sf]=py;
                }
            }
        }
    }
}

fout<<rezultat;

}