Creo que @K. Hu sugerencia de un algoritmo basado en el teorema de Kuratowski debe ser el más fácil de entender y de aplicar. Vamos a tratar de escribirlo en pseudocódigo:
is_planar(G):
If G is the empty graph, return TRUE.
If G is isomorphic to K_(3,3) or K_5, return FALSE.
For each vertex V of G:
Let H be a copy of G with V and all adjacent edges removed.
If not is_planar(H), return FALSE.
For each edge E of G:
Let H be a copy of G with E removed.
If not is_planar(H), return FALSE.
For each edge E of G:
Let H be a copy of G with E contracted.
If not is_planar(H), return FALSE.
return TRUE.
Esto sólo suele terminar en una cantidad razonable de tiempo muy pequeños gráficos. Sin embargo, hay optimizaciones como memoization que puede mejorar el tiempo de ejecución, algo sin alterar la estructura general del programa. Posiblemente se podría extender a trabajar para las grandes gráficos de un unpathological la naturaleza, o al menos aquellos con ciertas propiedades atractivas.
Además, tiene la ventaja de generalizar fácilmente a otras superficies topológicas mientras el prohibido a los menores de edad son conocidos.