I'm just starting to program. uf is a join-search class with a union of methods that binds the roots of two nodes. This piece of code is responsible for opening the grid site and combining the site with its neighbor, if any of the neighbors opens. And if one of its neighbors is full, fill in all the nodes associated with the site. This is the actual code:
if(i == 1){ uf.union(len*len, xyTo1D(i,j)); if(existAndOpen(i+1,j)){ uf2.union(xyTo1D(i+1,j), xyTo1D(i,j)); uf.union(xyTo1D(i,j), xyTo1D(i+1,j)); } if(existAndOpen(i-1,j)){ uf2.union(xyTo1D(i-1,j), xyTo1D(i,j)); uf.union(xyTo1D(i,j), xyTo1D(i-1,j)); } if(existAndOpen(i,j-1)){ uf2.union(xyTo1D(i,j-1), xyTo1D(i,j)); uf.union(xyTo1D(i,j), xyTo1D(i,j-1)); } if(!(j == len && i == len)){ if(existAndOpen(i,j+1)){ uf2.union(xyTo1D(i,j+1), xyTo1D(i,j)); uf.union(xyTo1D(i,j), xyTo1D(i,j+1)); } } } else{ if(existAndFull(i+1,j)){ uf2.union(xyTo1D(i+1,j), xyTo1D(i,j)); uf.union(xyTo1D(i,j), xyTo1D(i+1,j)); } if(existAndFull(i-1,j)){ uf2.union(xyTo1D(i-1,j), xyTo1D(i,j)); uf.union(xyTo1D(i,j), xyTo1D(i-1,j)); } if(existAndFull(i,j-1)){ uf2.union(xyTo1D(i,j-1), xyTo1D(i,j)); uf.union(xyTo1D(i,j), xyTo1D(i,j-1)); } if(!(j== len && i == len)){ if(existAndFull(i,j+1)){ uf2.union(xyTo1D(i,j+1), xyTo1D(i,j)); uf.union(xyTo1D(i,j), xyTo1D(i,j+1)); } } if(existAndOpen(i+1,j)){ uf.union(xyTo1D(i,j), xyTo1D(i+1,j)); } if(existAndOpen(i-1,j)){ uf.union(xyTo1D(i,j), xyTo1D(i-1,j)); } if(existAndOpen(i,j-1)){ uf.union(xyTo1D(i,j), xyTo1D(i,j-1)); } if(!(j== len && i == len)){ if(existAndOpen(i,j+1)){ uf.union(xyTo1D(i,j), xyTo1D(i,j+1)); } } } }
How can I simplify the code?