Pagini recente » Cod sursa (job #2887912) | Cod sursa (job #1145055) | Cod sursa (job #591144) | Cod sursa (job #1937773) | Cod sursa (job #150484)
Cod sursa(job #150484)
//problema castel
#include<fstream.h>
#include<stdlib.h>
ifstream f("castel.in");
ofstream g("castel.out");
int main(){
int * l[40000];
int m,n,k,i,o,ch[40000],s,d,q[40000],u[40000],x,y;
f>>m>>n>>k;
o=m*n;
for(i=1;i<=o;i++){
l[i]=(int *)realloc(l[i],sizeof(int));
l[i][0]=0;
f>>ch[i];
u[i]=0;
}
f.close();
s=d=0;
q[s]=k;
u[k]=1;
while(s<=d){
x=q[s];
for(i=1;i<=l[x][0];i++){
u[l[x][i]]=1;
d++;
q[d]=l[x][i];
}
l[x]=(int *)realloc(l[x],sizeof(int));
if(x%m!=0){
y=x+1;
if(u[y]==0) if(u[ch[y]]==1){
u[y]=1;
d++;
q[d]=y;
}
else{
l[ch[y]][0]++;
l[ch[y]]=(int *)realloc(l[ch[y]],((l[ch[y]][0]+1)*sizeof(int)));
l[ch[y]][l[ch[y]][0]]=y;
}
}
//daca exista elem dr
if(x%m!=1){
y=x-1;
if(u[y]==0) if(u[ch[y]]==1){
u[y]=1;
d++;
q[d]=y;
}
else{
l[ch[y]][0]++;
l[ch[y]]=(int *)realloc(l[ch[y]],((l[ch[y]][0]+1)*sizeof(int)));
l[ch[y]][l[ch[y]][0]]=y;
}
}
//daca exista elem stg
if(x>n){
y=x-n;
if(u[y]==0) if(u[ch[y]]==1){
u[y]=1;
d++;
q[d]=y;
}
else{
l[ch[y]][0]++;
l[ch[y]]=(int *)realloc(l[ch[y]],((l[ch[y]][0]+1)*sizeof(int)));
l[ch[y]][l[ch[y]][0]]=y;
}
}
//daca exista elem sus
if(x<=o-n){
y=x+n;
if(u[y]==0) if(u[ch[y]]==1){
u[y]=1;
d++;
q[d]=y;
}
else{
l[ch[y]][0]++;
l[ch[y]]=(int *)realloc(l[ch[y]],((l[ch[y]][0]+1)*sizeof(int)));
l[ch[y]][l[ch[y]][0]]=y;
}
}
//daca exista elem jos
s++;
}
int r=0;
for(i=1;i<=o;i++)
if(u[i]==1) r++;
g<<r;
g.close();
return 0;}