001
03.09.2003, 00:27 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft... (Operator)
|
da ja anscheinend überhaupt keiner Bock auf das Rätsel hat werd ichs mal auflösen. Vielleicht gefällt euch ja das Folgerätsel dazu besser. Habs gerade fertig gemacht.
C++: |
void createLab(int xstart, int ystart, int xdim, int ydim, int** &lab){ int i,j,k,help;
if(!xstart){ if(!(xdim%2))xdim++; if(!(ydim%2))ydim++; lab=new int*[xdim]; for(i=0;i<xdim;i++) lab[i] = new int[ydim]; for(j=0;j<ydim;j++) for(i=0;i<xdim;i++) lab[i][j]=1; //Aussenmauern (Nullen) setzen for (i=0;i<ydim;i++){lab[0][i]=0;lab[xdim-1][i]=0;} for (i=0;i<xdim;i++){lab[i][0]=0;lab[i][ydim-1]=0;}
//Eingang ermitteln i=rand()%(xdim-1); if(!(i%2))i++; lab[i][0]=1;
//Ausgang ermitteln i=rand()%(xdim-1); if(!(i%2))i++; lab[i][ydim-1]=1;
if(xdim>3 || ydim>3) createLab(1, 1, xdim-2, ydim-2, lab);
}else{
//"zufällige" Berechnung ob vertikale oder horizontale Mauer gezogen wird. j=0;k=0; for(i=0;i<(xdim-xstart);i++)j+=rand()%2; for(i=0;i<(ydim-ystart);i++)k+=rand()%2;
if(j>k){ // Vertikale Mauer ziehen do{help=rand()%xdim;if(help%2)help++;}while(help<xstart); for(i=ystart;i<ydim+1;i++)lab[help][i]=0; i=help; //Durchgang setzen do{help=rand()%ydim;if(!(help%2)){help++;}}while(help<ystart); lab[i][help]=1; k=0; } else{ //Horizontale Mauer ziehen do{help=rand()%ydim;if(help%2){help++;}}while(help<ystart); for(i=xstart;i<xdim+1;i++) lab[i][help]=0; i=help; //Durchgang setzen do{help=rand()%xdim;if(!(help%2)){help++;}}while(help<xstart); lab[help][i]=1; k=1; }
//rekuriver Aufruf der Sublabs if(k){ //Wenn horizontale Mauer gezogen if((i-ystart)>2) createLab(xstart,ystart,xdim,i-1,lab); if((ydim-i)>2)createLab(xstart,i+1,xdim,ydim,lab);
} else{ //Wenn vertikale Mauer gezogen if((i-xstart)>2)createLab(xstart,ystart,i-1,ydim,lab); if((xdim-i)>2)createLab(i+1,ystart,xdim,ydim,lab); } }//End else
}
|
-- ...fleißig wie zwei Weißbrote |