private bool IsPlanar(Graph g) { Counter++; if (g.IsCompleteBipartite(3, 3) || g.IsComplete(5)) { NonplanarSubgraph = g; return false; } if (g.Size == 5) return true; foreach (var edge in g.GetAllEdges()) { var h = g.Shrink(edge.U, edge.V); var isPlanar = IsPlanar(h); if (!isPlanar) { ExtendNonplanarSubgraph(g, edge); return false; } } return true; }