I would lower the constrains for possible city-locations. Calculate a probability for each position for a city.
Than set a city by random according to the probabilities of all locations not yet occupied by cities.
Than lower the probabilities around the new set city (within a certain radius, Near the city lower the probabilities a lot (or even set them ti 0) and only lower then less with increasing distance.
This way the cities should be spread around your terrain quite naturally.
Example (very little one) How to take the next location:
You have 3 possible locations with probabilities 0.9, 0,2 and 0.4
Now sum up the probabilities 0.9 + 0.2 + 0.4 = 1.5
now take a random number between 0 and 1.5.
0 .. 0.9 take the first location
0.9 .. 1.1 take the second location
1.1 .. 1.5 take the third location