I have a computer science problem that I've been thinking a lot about lately, and I'd be interested to hear other people's feedback:
Let's say you have a 3d blockworld (like minecraft). The world is "stable" if, for any block, there exists a solid path from that block to the bottom-most row of blocks. When the world is generated, it's guaranteed to be stable, but as players go around digging up the blocks, they could make the world unstable. For example, the player could dig out the trunk of a tree, in which case the top of the tree would be hovering in midair, and thus the world is unstable.
The goal is to quickly figure out if the world becomes unstable as the result of a dig, and which cubes should be removed to restore the world to a stable state. The algorithm should be fast and work in the context of a world where many digs are taking place, most of which do not make the world unstable.
One naive approach would be to take each adjacent cube after a dig and find a path to the bottom of the earth. If you can't find a path to the bottom from any of the neighbors, the world is now unstable (and you also learn which cubes to remove as part of the process). This falls apart when the path to the bottom is very long. It's pretty easy to come up with an example where this becomes computationally expensive (Imagine removing the top of a large, winding tower).
This problem can be thought of as a graph problem where you want to quickly detect if a single vertex can divide the graph into two or more components.
I'm interested to hear if anyone has other ideas of ways to make this problem tractable.