Cod sursa(job #953184)

Utilizator misinozzz zzz misino Data 25 mai 2013 11:13:24
Problema Castel Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");
int n,m,i,j,p,u,d,k,xx,yy,x,xp,y,nrc,a[155][155],q[155*155],v[155*155],viz[155][155];
vector<int>kl[155*155];
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
int ein(int x,int y)
{
    if(x<0||y<0||x>=n||y>=m)
    return 0;
    return 1;
}
int main()
{
    f>>n>>m>>k;
    for(i=0;i<n;++i)
    for(j=0;j<m;++j)
    {
        f>>a[i][j];
        --a[i][j];
    }
    --k;
    q[1]=k;
    p=u=1;
    viz[k/m][k%m]=1;
    while(p<=u)
    {
        x=q[p];
        ++p;
        v[x]=1;
        ++nrc;
        for(i=0;i<kl[x].size();++i)
        if(!viz[kl[x][i]/m][kl[x][i]%m])
        {
            ++u;
            q[u]=kl[x][i];
            viz[kl[x][i]/m][kl[x][i]%m]=1;
        }
        xp=x;
        x=x/m;
        y=xp%m;
        for(d=0;d<=3;++d)
        {
            xx=x+dx[d];
            yy=y+dy[d];
            if(!ein(xx,yy)||viz[xx][yy])
            continue;
            if(v[a[xx][yy]])
            {
                ++u;
                q[u]=xx*m+yy;
                viz[xx][yy]=1;
            }
            else
            kl[a[xx][yy]].push_back(xx*m+yy);
        }
    }
    g<<nrc<<'\n';
    return 0;
}