An implementation of distance-vector routing, a distributed routing algorithm where multiple routers cooperate to transport packets to their destinations efficiently. Your routing algorithm will run on each router within a simulated network. Each router will exchange messages with neighboring routers and hosts to construct a forwarding table. As the network topology changes, your routing algorithm will update the forwarding tables to maintain connectivity.