private void startLabeling(ArrayList<Integer> startCell, int clusterId, HashMap<ArrayList<Integer>, Integer> gridSign){
		
		// if the startCell has not included in the cluster, add it
		if ( !gridLabel.containsKey(startCell) ) {
			gridLabel.put(startCell, clusterId);
		}
		
		// create a queue for other to-be-examined cells 
		ArrayList<ArrayList<Integer>> queueCell = new ArrayList<ArrayList<Integer>>();
		queueCell.add(startCell);
		
		while ( queueCell.size() > 0 ) {
			// pop the first elements under consideration
			ArrayList<Integer> currCell = queueCell.remove(0);
			
			// find the neighbors of startCell
			ArrayList<ArrayList<Integer>> neighbors = Util.get8Neigbor(currCell);
			
			// look over the neighbor if there is significant cell, but unclustered yet
			for (int i=0; i<neighbors.size(); i++) {
				ArrayList<Integer> neighbor = neighbors.get(i);
				if ( gridSign.containsKey(neighbor) && !gridLabel.containsKey(neighbor)) {
					gridLabel.put(neighbor, clusterId);
					queueCell.add(neighbor);
				}
			}
			
		}
	}