#include #include #include #include #include #include #include using namespace std; typedef vector VI; typedef vector VVI; VVI mat, mate; int v; typedef vector Face; multiset faces; vector inface; VI maiorciclo; VI cicloatual; vector incluido; bool planar; void auxencontra(int x){ if(!maiorciclo.empty()) return; for(int i=0; i encontra_ciclo(){ maiorciclo = VI(); cicloatual = VI(); incluido = vector(v, false); auxencontra(0); return maiorciclo; } vector fragatual; void inicializar(){ inface = vector(v, false); vector ciclo = encontra_ciclo(); Face f; puts("CICLO"); for(int i=0; i::iterator f = faces.begin(); f!=faces.end(); ++f){ //PARA CADA FACE Face aux = (*f); bool xi=false, yi=false; for(int k=0; k=2){ puts(">=2"); if(any.empty()){ printf("! %d %d\n", x, y); for(int i=0; i::iterator f = faces.begin(); f!=faces.end(); f++){ for(int i=0; i<(*f).size(); ++i) printf("%d ", (*f)[i]); puts(""); } }while(cordalseg()); puts("\nFACES FINAIS"); for(multiset::iterator f = faces.begin(); f!=faces.end(); f++){ for(int i=0; i<(*f).size(); ++i) printf("%d ", (*f)[i]); puts(""); } } int main(){ scanf("%d", &v); mat = VVI(v, VI(v, 0)); mate = VVI(v, VI(v, 0)); int a, b; while(scanf("%d %d", &a, &b)!=EOF){ if(!a and !b) break; mat[a][b]=mat[b][a]=1; } planarity(); if(!planar){ printf("\nInfelizmente, nem todas as arestas puderam ser inseridas na imersao planar!\nAbaixo segue a lista das arestas que nao puderam ser colocadas:\n"); for(int i=0; i %d\n", i, j); } } }else{ puts("\nGRAFO PLANAR"); } }