CTC has the capability to figure out what routes are possible by inspecting the scene structure, on how blocks, switches etc are connected and where the signals are. In fact, the steps to create a simple territory don’t even mention route building, and if you stick to the defaults here and there, you can end up with 100s, even 1000s of route possibilities, depending on the complexity of your web of tracks, switches and signals in your layout. By default, CTC will build a route table for you at initialization time when you start the simulator.
At the prototype, however, not all theoretically possible routes are allowed. You may have multiple paths from A to B, but only one of them you would ever use, or you have restrictions that some routes may be used for switching only.
CTC offers you a way to tailor the route table by eliminating those “undesirable” routes. You create a route table – the same way CTC would do at runtime. You then go into the route table and eliminate those you don’t want. Set a flag that you don’t want CTC to create the route table at runtime and save your own route table as part of the territory file. See here for some details.
Creating your own route table has also the advantage that you can add some additional data, For instance you can add “protecting switches”, which are those that are not part of the traveled route, but in nearby tracks to align such as to protect the path of your route. (Note: TDP has the concept of “linking” switches together, so that two such switches can only be turned together, which accomplishes that kind of protection somewhat)
CTC can maintain two route tables, one for regular train movements, and one for switching. Because of slower speed during switching, protecting switches are typically not used for switch routing
If you change the track layout, some routes in the route table you built before may not be executable. You don’t need to rebuild the table from scratch, though. CTC offers a way to update the table by allowing you to add possible new routes (including those you might have deleted sometime earlier) without touching those routes that are not affected. This helps also to “transfer” protecting switches from routes that are not valid anymore to the new ones replacing them.