public class Cluster{
private boolean occupied[];
private int latticeSize;

Cluster(int lattice){
int i;
occupied = new boolean[lattice*lattice];
for(i=0;i<lattice*lattice;i++)
occupied[i]=false;
latticeSize = lattice;
}

public void setOccupiedFalse(){
for(int i=0;i<latticeSize*latticeSize;i++)
occupied[i]=false;
}

private int compressIndex(int i, int j){
return(i+latticeSize*j);
}

public void setOccupied(int i, int j){
occupied[compressIndex(i,j)]=true;
}

public boolean isOccupied(int i, int j){
if(occupied[compressIndex(i,j)]==true) return true;
else
return false;
} 

public boolean isNeighbortoCluster(int i, int j){
int inew,jnew;

inew=(i+1);
if(inew==latticeSize)inew=i;
jnew=j;
if(isOccupied(inew,jnew)) return true;

inew=(i-1);
if(inew<0)inew=i;
jnew=j;
if(isOccupied(inew,jnew)) return true;

jnew=(j+1);
if(jnew==latticeSize)jnew=j;
inew=i;
if(isOccupied(inew,jnew)) return true;

jnew=(j-1);
if(jnew<0)jnew=j;
inew=i;
if(isOccupied(inew,jnew)) return true;

return false;
}

public boolean BoundaryPoint(int x, int y){
if((x==0) || (y==0) || (x==latticeSize-1) || (y==latticeSize-1)) return true;
else
return false;
}

}

