Very simple algorithm I came up with:
- Fill your dungeon floor.
- For each corner, place a room of random dimensions (up to 3/4 of the floor's width/height).
- The bottom left one is at least wide/high enough to touch the top right one.
- The bottom right one is at least wide/high enough to touch the top left one.
While leaving lots of room for optimization, this gives you rather neat and simple results, some examples I
hacked together in a quick PHP snippet (I'm aware that my offsets are wrong and some rooms are "drawn" with 0 width/height, but it still looks good as a proof of concept):
##########
# #
# #
# #
# #
##### #
# #
# #
# #
##########
##########
##### #
##### #
# #
# #
# #####
# #####
# #
# #
##########
##########
# ###
# ###
# ###
# #
# #
# #
# #
# #
##########
##########
# #### #
# #### #
# #### #
# #
# #
# #
# #
# #
##########
##########
# #####
# #####
# #
# #
# #
# #
# #
# #
##########
##########
# #
##### #
##### #
##### #
##### #
##### #
# #
# #
##########
##########
# #
# #
# #
# #
##### #
# #
# #
# #
##########
##########
#### #
#### #
# #
# #
# #
# #
# #
# #
##########
##########
# #### #
# #### #
# #
# #
# #
# #
# #
# #
##########
##########
# #
# #
# #
### #
# #
# #
# #
# #
##########