My own pathfinding is sight based. If zombies see the player, they move towards him. I’ve implemented a repulsion equation, as well, to keep the zombies spread out a bit and vary the paths each take.
Loop through and check distances. If they are too close, shove the other one a bit away by giving it a speed vector. Add up all the speed vectors each zombie is given before it moves and then you’ll have the real speeds/velocities/whatever-you-want-to-call-its the zombie should go. Add that final speed vector to the x/y coords for the actual movement.