Cod sursa(job #901378)

Utilizator bodyionitaIonita Bogdan Constantin bodyionita Data 1 martie 2013 09:54:43
Problema Castel Scor 100
Compilator cpp Status done
Runda simulare_10 Marime 1.17 kb
#include <cstdio>
using namespace std;
const int dx[4] = {1,0,0,-1};
const int dy[4] = {0,-1,1,0};
int j,k,ok,n,m,l,xi,yi,q[2][25001],i,dr,t[25001],a[151][151],b[151][151];
inline void expand()
{
    int x,y,i,st=0;
    while (st<=dr)
    {
        st++;
        x=q[0][st];
        y=q[1][st];
        for (i=0;i<4;i++)
        if (x+dx[i]>0 && y+dy[i]>0 && x+dx[i]<=n && y+dy[i]<=m && t[a[x+dx[i]][y+dy[i]]] && b[x+dx[i]][y+dy[i]]==-1)
        {
            b[x+dx[i]][y+dy[i]]=0;
            t[(x+dx[i]-1)*m+y+dy[i]]=1;
            ok=1;
            dr++;
            q[0][dr]=x+dx[i];
            q[1][dr]=y+dy[i];
        }
    }
}
int main()
{
    freopen("castel.in","r",stdin);
    freopen("castel.out","w",stdout);
    scanf("%d%d%d",&n,&m,&k);
    if (k%m==0) {xi=k/m;yi=m;} else {xi=k/m+1;yi=k%m;};
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++)
            scanf("%d",&a[i][j]);
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++) b[i][j]=-1;
    t[k]=1;
    b[xi][yi]=0;
    q[0][1]=xi;
    q[1][1]=yi;
    dr=1;
    ok=0;
    expand();
    while (ok)
    {
        ok=0;
        expand();
    }
    printf("%d\n",dr);
    return 0;
}