Here are another couple of great navigation/pathfinding links:
Craig Reynold's steering behaviour stuff:
http://www.red3d.com/cwr/steer/Obstacle.html There are lots of nice example applets and also an old GDC paper:
http://www.red3d.com/cwr/papers/1999/gdc99steer.html (This approach is perfect if you can always fit between the circles, but can also be used in conjunction with a traditional path (
example)
Amit's A* Pages:
http://theory.stanford.edu/~amitp/GameProgramming/This is probably the best introduction to A*, including some nice analysis of what can go wrong. I do realise the A* isn't the problem in your case, it's just a great resource.
When you say "dynamic", can the obstacles move? If so, how much and how frequently? If the environment is
really dynamic (like crossing a road, say) then you should consider not calculating a path at all and using a purely reactive system.
Also, a graph may not be a good idea if all (or most) of those circles can move, as the topology of the graph should change rather than just flagging edges as blocked/clear.
Thinking about pathfinding and moving obstacles, another advantage of using a finer grid (and maybe working on optimising or distributing the load of the A* if that's possible) is that it's pretty easy to update which squares are blocked.
I'm being a bit anti-graph here, but it just depends on what you expect to be happening in the game environment.
[Also I might be getting too hung-up on the word "dynamic" here, but it would have a big impact on what approach to use]