Pagini recente » Cod sursa (job #1450749) | Cod sursa (job #385430) | Cod sursa (job #2782648) | Cod sursa (job #1747648) | Cod sursa (job #265517)
Cod sursa(job #265517)
#include <fstream.h>
int main()
{
long n,m,k,i,aux,sfc,inc,c,x,j;
unsigned int q[24025];
long lst[155][155];
unsigned int u[24025];
ifstream fin("castel.in");
fin>>n>>m>>k;
for (i=1; i<=n*m; i++)
{
lst[i][0]=0;
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;
}