Pagini recente » Cod sursa (job #2882135) | Cod sursa (job #605495) | Cod sursa (job #1405547) | Cod sursa (job #680508) | Cod sursa (job #1397224)
#include <iostream>
#include <fstream>
#define LMAX 23000
using namespace std;
ifstream f ("castel.in");
ofstream g ("castel.out");
int n,m,i,j,nr,q,a[155][155],v[LMAX],lin,col,inc,sf,k,dl[4]={-1,0,1,0},dc[4]={0,1,0,-1};
struct num
{
int l,c;
}C[LMAX],coada[LMAX],x,y;
void del(int x,int &k)
{
int i;
for (i=x;i<k;i++)
{
coada[i].l=coada[i+1].l;
coada[i].c=coada[i+1].c;
}
k--;
}
int main()
{
f>>n>>m>>q;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
f>>a[i][j];
v[q]=1;
lin=q/m+1;
col=(q-1)%m+1;
a[lin][col]=0;
C[0].l=lin;
C[0].c=col;
while (inc<=sf)
{
while (inc<=sf)
{
x=C[inc++];
for (i=0;i<4;i++)
{
y.l=x.l+dl[i];
y.c=x.c+dc[i];
if (v[a[y.l][y.c]]==1)
{
nr=(y.l-1)*m+(y.c-1)%m+1;
v[nr]=1;
a[y.l][y.c]=0;
C[++sf]=y;
}
else if (a[y.l][y.c]!=0)
{
coada[++k]=y;
//a[y.l][y.c]=0;
}
}
}
for (i=1;i<=k;i++)
{
y=coada[i];
if (v[a[y.l][y.c]]==1)
{
nr=(y.l-1)*m+(y.c-1)%m+1;
v[nr]=1;
a[y.l][y.c]=0;
C[++sf]=y;
del(i,k);
i--;
}
}
}
g<<sf+1;
return 0;
}