public int[][] combatBfs(List<Tile> queue, int[][] weights) {    	 
    	// Initialize costMap array with 0's.
    	// 0 = unchecked tile.
    	// Anything above 0 = already checked tile 
    	// (since cost has been assigned to it) 
    	int[][] costMap = createEmptyCostMap();

    	// loop through open set and assign their positions 
    	// in costMap a value of 1 (if they don't have a 
    	// value assigned already). Since 0 = unchecked tile,
    	// assigning an initial value of 1 sets the
    	// initial queue to already be 'checked'.  
    	for(Tile t : queue) { 
    		costMap[t.getRow()][t.getCol()] = 1;    		
    	}
    	
    	// initialize weights map to a bunch of 0's if it is null.
    	if(weights == null) {
    		weights = createEmptyCostMap();
    	}
    	    	
    	// While there are still nodes left to be evaluated.
    	while(queue.size() > 0) {
    		Tile tile = queue.remove(0);
    		for(Aim direction : Aim.values()) {
    			Tile neighbor = getTile(tile, direction);
    			int currCost = costMap[neighbor.getRow()][neighbor.getCol()];
    			int newCost = costMap[tile.getRow()][tile.getCol()] + 1;    			
    			
    			// Skip this tile if it already has a lower cost
    			// assigned to it.
    			if(currCost != 0 && currCost <= newCost)
    				continue;
    				    		    			
    			// Skip tile if it isn't a walkable tile.
    			if(!getIlk(neighbor).isPassable())
    				continue;
    			
    			// add cost of tile to costMap
    			costMap[neighbor.getRow()][neighbor.getCol()] = newCost;
    			
    			// add weights!
    			costMap[neighbor.getRow()][neighbor.getCol()] += weights[neighbor.getRow()][neighbor.getCol()];

    			
    			// clustering
    			if(getIlk(neighbor) == Ilk.MY_ANT) {
    				costMap[neighbor.getRow()][neighbor.getCol()] -= 2; 
    			}
    			
    			
    			// add to queue
    			if(currCost == 0)
    				queue.add(neighbor);
    		}    		
    	}
    	
    	return costMap;
    }