The way I did it was to divide the map in tiles. So every character has a 'real_x' and a 'tile_x', and a 'real_y' and a 'tile_y'.
So instead of 'one zombie is at location 750 x 600 pixels' (real position), you should say 'one zombie is at location 18, 15', since your tiles are 40x40.
Collision should be checked this way too. 'Is tile 8, 8 passable?,' for example.
In a Cartesian coordinate system, you will be using quadrant IV. Just like Sfml's position system.
The way the algorithm works is that it calculates the path and puts it on a lists. It does not calculate the path each frame!
So lets say the zombie wants to move from 0, 0 to 3, 0, and there are no collisions between them. The zombie has to walk right to 1, 0 then 2, 0 then 3, 0.
You have to make FIRST a system where you can assign a zombie a PRE-DESIGNED path YOU give. We can also called it a 'canned path'.
First make this system and give the zombies different paths. Make the zombies walk in circles, for example.
0, 0 -> 1, 0 -> //moving right
1, 1 -> //moving down
0, 1 -> //moving left
0, 0 //moving up
What the A* algorithm does is give you the DATA you will put inside this system. So you have to make this system first.