I have ~20 or more enemies and they need to follow a target and avoid to go on top of themselves. I mean follow a target and avoid to collide with each other. Area, on which they are walking, is just a rectangle plane in 2D space. What would be the most simple and efficient algorithm for this? Thanks.
Separation: steer to avoid crowding local flockmates Alignment: steer towards the average heading of local flockmates Cohesion: steer to move toward the average position of local flockmates
The combination of those three will create a good approximation of a group moving together. These behaviors are described well in the GDC99 paper Steering Behaviors For Autonomous Characters (Craig W. Reynolds). Additionally there's a few Java demos of flocking and some other steering behaviors in action here. The other behaviors include a path following steering behavior and a follow the leader behavior that can be useful to you for having a group move along a path.