Pagini recente » Cod sursa (job #1204874) | Cod sursa (job #52990) | Cod sursa (job #907555) | Cod sursa (job #1891031) | Cod sursa (job #198548)
Cod sursa(job #198548)
#include<stdio.h>
struct nod{int inf;nod *urm;}*l[30003];
int a[30003],n,m,k,i,d[4]={1,-1,m,-m};
int p,u,b,c[30003],viz[30003],ch[30003];
int main(){
FILE *f=fopen("castel.in","r");
fscanf(f,"%d %d %d",&n,&m,&k);
for(i=1;i<=n*m;i++)
fscanf(f,"%d",&a[i]);
fclose(f);
int nr=0;
p=1;
u=1;
c[1]=k;
nr=1;
ch[k]=1;
d[2]=m;
d[3]=-m;
viz[k]=1;
while(p<=u){
if(viz[c[p]]==2){
nod *q;
b=c[p];
for(q=l[b];q!=NULL;q=q->urm){
u++;
c[u]=q->inf;
viz[q->inf]=2;
}
}
for(i=0;i<=3;i++){
b=c[p]+d[i];
if(!viz[b]&&b>0&&b<=n*m){
if(ch[a[b]]){
u++;
c[u]=b;
if(!ch[b]){
//luam ch b
ch[b]=1;
//vedem ce putem deschide cu ea si adaugam in coada
nod *q;
for(q=l[b];q!=NULL;q=q->urm){
u++;
c[u]=q->inf;
viz[q->inf]=2;
}
}
}
else{
//adaugam in l[a[b]]
nod *pp=new nod;
pp->urm=l[a[b]];
pp->inf=b;
l[a[b]]=pp;
}
viz[b]=1;
}
}
p++;
}
nr=u;
FILE *g=fopen("castel.out","w");
fprintf(g,"%d",nr);
fclose(g);
return 0;
}