If we could measure 'loopiness' we could control for it.

That shouldn't be too hard.

Indeed it's not.

http://en.wikipedia.org/wiki/Connectivity_(graph_theory)Connectivity is a measure of the number of "alternative paths" between points in a graph (a set of points and connections between points - essentially an abstract description of a roguelike's map, or of its room-corridor diagram).

If it's 1-connected, then the map contains a pair of points that you can disconnect just by cutting off one connection.

If it's 2-connected, then the map contains a pair of points that you can disconnect by cutting off two connections (and if you just cut off one connection, there's always an alternative route between any pair of points).

If it's 3-connected, then the map contains a pair of points that you can disconnect by cutting off three connections (and if you just cut off one connection, there are always two alternative routes between any pair of points).

You can probably calculate the connectivity number with the min-cut algorithm in Boost. There are some caveats, though - just being able to measure the connectivity doesn't mean being able to control it. If you have a minimum and maximum connectivity for a level to be accepted, you need to be able to regenerate the level reasonably and compute the connectivity cheaply, or you need functions that can add or remove paths to increase or decrease the connectivity.

If all your corridors are two tiles wide, the reported connectivity will be different depending on whether you input the room/corridor graph or the graph of the whole map grid. if you have a mix of two-tile and one-tile corridors, the value will be difficult to interpret.

It's also a very strict measure. If you have a level with connectivity 3, and you add a single dead end, the resulting graph has connectivity 1.