Abstract: A ring is routed through a subset of nodes of a communication network by first providing a branch-decomposition having a pattern relating to separations of the network. The branch-decomposition can be performed using internal two-separations, internal three-separations, eigenvector separations and pushing. If the branch-decomposition has a branch-width less than or equal to a predetermined constant value, then the branch-decomposition is used to determine costs associated with portions of the ring passing through separations of the network by examining matchings corresponding to edges of the branch-decomposition and selecting a lowest cost ring by examining the matchings and choosing a lowest cost set of matchings containing the subset of nodes. The branch-decomposition can be provided once for a fixed network and then costs can be determined and the ring route selected repeatedly for different subsets of ring nodes and different edge costs. The edge costs can be negative.