The left plot shows the relief of a model island after many iterations of the following process. Start with a flat, circular island. Put a drop of water at a random point. If any neighbouring points are lower, move it there, lower the height of the previous point, and increase the height of the new point. If the gradient between any points gets too steep, transfer mass from the heigher point to the lower point. In this way, river channels carve valleys and erosion topples cliffs until the structure above is produced: with branching rivers and sediments flowing into the surrounding ocean.
The right plot shows the island populated by the water involved in the erosion processes, showing where the most water flows over the land. Both plots were produced in the excellent Gnuplot package.
Here's a toy Java program that simulates raindrop erosion on several starting topologies. Surface water and vegetation (which likes high, wet but not waterlogged ground) are also tracked.