Almost every problem associated with routing is known to be
intractable. The simplest routing problem, called the
Steiner tree problem, of finding the shortest route for one net in one layer with no obstacles and no design rules is known to be
NP-complete, both in the case where all angles are allowed or if routing is restricted to only horizontal and vertical wires. Variants of
channel routing have also been shown to be NP-complete, as well as routing which reduces
crosstalk, number of
vias, and so on. Even before routing problems were proved NP-complete, the difficulty of finding optimal solutions was apparent. Therefore almost all algorithms are based on
heuristics, which do not try for an optimum, but instead a solution that is "good enough". Design rules sometimes vary considerably from layer to layer. On integrated circuits with multiple metal layers, for example, the allowed width and spacing on the lower layers may be four or more times smaller than the allowed widths and spacings on the upper layers. This introduces many additional complications not faced by routers for other applications such as
printed circuit board or
multi-chip module design. Particular difficulties ensue if the rules are not simple multiples of each other, and when vias must traverse between layers with different rules. ==Overall routing strategy==