#include #include int komp,bb1,bb2,prave[300][300],horne[300][300],i,j,n,z,pocx,pocy,x[2][200],y[2][200],xs[300],ys[300],xback[210000],yback[210000],fil[300][300]; int filluj(int x,int y) { fil[x][y]=1; if ((x) && (prave[x][y]==0) && (!fil[x-1][y])) filluj(x-1,y); if ((y) && (horne[x][y]==0) && (!fil[x][y-1])) filluj(x,y-1); if ((xxs[j]) { z=xs[i];xs[i]=xs[j];xs[j]=z;} if (ys[i]>ys[j]) { z=ys[i];ys[i]=ys[j];ys[j]=z;} } pocx=1;for (i=1;i<2*n;i++) if (xs[i]>xs[pocx-1]) xs[pocx++]=xs[i]; pocy=1;for (i=1;i<2*n;i++) if (ys[i]>ys[pocy-1]) ys[pocy++]=ys[i]; for (i=0;iy[1][i]) {z=y[0][i];y[0][i]=y[1][i];y[1][i]=z;} bb1=yback[100000+y[0][i]]; bb2=yback[100000+y[1][i]]; for (j=bb1;j<=bb2-1;j++) prave[1+xback[100000+x[0][i]]][1+j]=i+1; } else { //vodorovna if (x[0][i]>x[1][i]) {z=x[0][i];x[0][i]=x[1][i];x[1][i]=z;} bb1=xback[100000+x[0][i]]; bb2=xback[100000+x[1][i]]; for (j=bb1;j<=bb2-1;j++) horne[1+j][1+yback[100000+y[0][i]]]=i+1; } /*printf("lave dolne\n"); for (j=0;j<=pocy;j++) { for (i=0;i<=pocx;i++) printf("%d %d |",prave[i][j],horne[i][j]); printf("\n"); }*/ bzero(fil,sizeof(fil));komp=0;filluj(0,0); //for (j=0;j<=pocy;j++) {for (i=0;i<=pocx;i++) printf("%d ",fil[i][j]);printf("\n");} for (i=0;i<=pocx;i++) for (j=0;j<=pocy;j++) if (!fil[i][j]) {komp++;filluj2(i,j); //for (j=0;j<=pocy;j++) {for (i=0;i<=pocx;i++) printf("%d ",fil[i][j]);printf("\n");} } printf("There are %d holes.\n",komp); } return 0; }