Pagini recente » Cod sursa (job #2433201) | Cod sursa (job #2331425) | Cod sursa (job #3190228) | Cod sursa (job #2406293) | Cod sursa (job #265510)
Cod sursa(job #265510)
#include <fstream.h>
long lst[155][155],u[24025];
int main()
{
long n,m,k,i,aux,q[24025],sfc,inc,c,x,j;
ifstream fin("castel.in");
fin>>n>>m>>k;
for (i=1; i<=n*m; i++)
{
u[i]=0;
fin>>aux;
lst[aux][0]++;
lst[aux][lst[aux][0]]=i;
}
q[1]=k; inc=0; sfc=1; u[k]=1; c=1;
while (inc<=sfc)
{
inc++;
for (i=1; i<=lst[q[inc]][0]; i++)
{
x=lst[q[inc]][i];
if (u[x]==0)
{
//nu e pe margine
if (x%m!=1 && x%m!=0)
{
if (u[x-1]==1 || u[x+1]==1 || u[x-m]==1 || u[x+m]==1)
{
u[x]=1;
sfc++;
q[sfc]=x;
c++;
} else
{
lst[x-1][0]++; lst[x-1][lst[x-1][0]]=x;
lst[x+1][0]++; lst[x+1][lst[x+1][0]]=x;
lst[x-m][0]++; lst[x-m][lst[x-m][0]]=x;
lst[x+m][0]++; lst[x+m][lst[x+m][0]]=x;
}
} else
//marginea stanga
if (x%m==1)
{
if (u[x+1]==1 || u[x-m]==1 || u[x+m]==1)
{
u[x]=1;
sfc++;
q[sfc]=x;
c++;
} else
{
lst[x-1][0]++; lst[x-1][lst[x-1][0]]=x;
lst[x+1][0]++; lst[x+1][lst[x+1][0]]=x;
lst[x-m][0]++; lst[x-m][lst[x-m][0]]=x;
lst[x+m][0]++; lst[x+m][lst[x+m][0]]=x;
}
} else
//marginea dreapta
if (x%m==0)
{
if (u[x-1]==1 || u[x-m]==1 || u[x+m]==1)
{
u[x]=1;
sfc++;
q[sfc]=x;
c++;
} else
{
lst[x-1][0]++; lst[x-1][lst[x-1][0]]=x;
lst[x+1][0]++; lst[x+1][lst[x+1][0]]=x;
lst[x-m][0]++; lst[x-m][lst[x-m][0]]=x;
lst[x+m][0]++; lst[x+m][lst[x+m][0]]=x;
}
}
}
}
}
ofstream fout("castel.out");
fout<<c;
fin.close();
fout.close();
return 0;
}