En teoría de grafos (una rama de la matemática), el problema del cartero chino (PCC), o problema del circuito del cartero, o problema de la inspección y selección de rutas, consiste en encontrar el camino más corto o circuito cerrado, que visite cada arista de un grafo (conectado) no direccionado, o sea, que pase al menos una vez por cada arista del grafo, volviendo al punto (o nodo) de partida. Cuando el grafo posee un circuito euleriano (un paseo cerrado que alcance toda arista solamente una vez), ese circuito es una solución óptima.
Alan J. Goldman[1] del Instituto Nacional de Estándares y Tecnología (EE. UU.), usó por primera vez la denominación 'problema del cartero chino' para este problema, ya que originalmente fue estudiado por el matemático chino Mei-Ko Kuan[2] en 1962, quien precisamente era cartero.[3][4]
Para que un grafo tenga un circuito euleriano, ciertamente tendrá que estar conectado.
Supongamos que tenemos un grafo conexo G = (V, E); entonces, las siguientes declaraciones son equivalentes:
Un camino euleriano (un camino que no es cerrado, pero que utiliza todas las aristas de G apenas una vez y solamente una vez) existe si y solamente si G es conectado y tiene dos vértices de valencia impar.
Sea T un subconjunto del conjunto de vértices de un grafo. El conjunto de aristas cuyos vértices de grado impar son los vértices en T es llamado enlace-T (en un grafo conexo, un enlace-T existe si y solamente si |T| es par). El problema del enlace-T consiste en encontrar el menor enlace-T. Y el menor enlace-T necesariamente lleva a una solución del problema del cartero chino.
En efecto, un menor enlace-T necesariamente consiste de |T| caminos, no habiendo dos con una arista en común, uniendo los vértices de T en pares. Los recorridos serán de tal forma que la extensión total de cada uno de ellos es tan pequeña como sea posible. Un enlace-T mínimo puede ser obtenido por un algoritmo de correspondencia ponderada que usa O(n3) pasos computacionales.[6]
Si un grafo tiene un circuito euleriano (o un camino euleriano), entonces un circuito euleriano (o camino) visita cada arista, y así la solución resulta ser cualquier circuito euleriano (o camino).
Y si un grafo no es euleriano, debe contener vértices de grado impar, y por aplicación del lema del apretón de manos, debe haber un número par de esos vértices. Entonces, para resolver el problema del cartero chino, primero debemos encontrar el menor enlace-T, y transformamos el grafo original en otro euleriano simplemente duplicando el enlace-T. Resulta entonces que la solución al problema del cartero chino en el grafo original, podrá ser obtenida o generada, sobre la base de la determinación de un circuito euleriano para el nuevo grafo.
Pocas variantes del problema del cartero chino han sido estudiadas en forma exhaustiva (NP-completo).[7]
El mejor resultado que puede esperarse se obtiene encontrando un camino que pase exactamente una sola vez por cada arista, es decir, un ciclo euleriano. Tal camino existe si y solamente si cada nodo del grafo es de grado par.
En caso contrario, un camino optimal pasa al menos dos veces por una misma arista. En este último caso, es más simple considerar el problema alternativo siguiente: en vez de permitir de pasar varias veces por la misma arista, se duplican las aristas del grafo en donde se permite pasar dos veces. Obviamente, el problema planteado entonces es del mismo tipo, pero ahora aplicado a un grafo diferente.
La idea es naturalmente la de ir ampliando poco a poco el grafo, hasta que el mismo sea euleriano, y cuando se obtenga, buscar un circuito euleriano en el grafo completo.
Para mejor comprender el algoritmo propuesto, es útil comenzar pensando el caso de un grafo en donde solamente se tienen dos nodos u y v de grado impar. Entonces, la solución óptima consiste en encontrar el camino más corto del nodo u al nodo v (utilizando por ejemplo el algoritmo de Dijkstra), completando el grafo con las aristas de este camino.
Después de haber agregado al grafo las aristas del camino más corto entre u y v, cada nodo es de grado par, y por lo tanto el grafo es euleriano, y por lo tanto tiene una solución válida.
En un grafo cualquiera con más de dos nodos de grado impar, será siempre par el número de nodos de grado impar, y entonces la solución óptima podrá ser obtenida con el siguiente algoritmo:[6]