Very nice.
First thing though, is that Tom isn't flooding the switch ports. Tom sends an ARP request asking "what MAC address is using this IP address?", which the switch itself then floods. Then the flood cascades to the other switches as well, and eventually Joe's machine responds with "I'm that IP address, here's my MAC address". In that process, the switches learn the MACs and which port they're reachable on. My original explanation assumed that each computer already knew the MAC address of the destination, but it works the same way, since the switches need to learn them as well, and in reality each computer wouldn't already know the MAC.
In the first section, switches C and D did learn where Tom is, because switch B flooded all ports, including the port connected to C, which also flooded all ports, including the port to D which flooded all of its ports too. C and D did not learn where Joe is though, since that only went to A.
Then that changes what happens in the other scenarios. Amy's computer has to send an ARP request for Tom's machine's IP (each computer received the ARP request Tom sent out earlier, but ignored it because Tom wasn't asking for them, it was asking for Joe). So the request gets flooded to all of D's ports, C's ports, B's ports, and A's ports. Now Tom's computer replies. All the switches have learned Amy's MAC now, and already knew where Tom was.
The switches themselves do NOT respond to any ARP requests or any other traffic. The learning and forwarding is ONLY so that the switch knows which port to send traffic to, based on the destination MAC. They also do NOT learn the exact location of the MAC. D does not know that Tom is on A, it only knows that it receives traffic from Tom through its own port 1, so if someone sends to Tom's MAC, it needs to send the traffic through port 1 and not some other port.
All the switches now know where Amy and Tom are, and switches A and B know where Joe is.
Now, Tim needs to send to Tom, so it does an ARP request which floods all the ports, and all the switches learn where Tim is. Tom responds, now Tim knows the MAC address for Tom.
Now we'll move on to the next thing. Now, all the switches know where Tim, Tom and Amy are. Only A and B know where Joe is.
Tim sends to Tom, and all the switches know where they both are, so they only send through the port that each switch knows is a path to Tom. Switch C doesn't know if Tom is on another switch, or on another network entirely, or connected directly to port 1. It only knows that it can reach Tom through port 1. So it passes up the chain directly to Tom.
Now, Tim needs to reach Joe. Assume for the moment that Tim does already know the MAC for Joe (maybe he was on the same switch at one point and now connects to C). Switch C doesn't know where he is, so it floods the traffic to all ports. Switch D receives and floods to all ports, and it dies on that end. Switch B receives it and knows Joe is reachable on port 3, so it does NOT send the traffic to switch A at all, it goes directly to Joe's port. Now Joe responds, and switch C learns his MAC, but switch D still doesn't know it.
Eventually when Joe or Amy need to communicate with each other, or Joe needs to start a connection to someone rather than only receiving connections, he'll end up broadcasting and D will learn his MAC.
You also don't have any uplink ports on those routers, only normal ports with crossover cables.