@@ -23,6 +23,7 @@ public static boolean isPlanar(Grafo g)
2323 return true ;
2424 }
2525
26+ // if(ishomeomorphictoK5(g) || ishomeomorphictoK33(g))
2627 if (ishomeomorphictoK5 (g ))
2728 {
2829 System .out .println ("testaK5" );
@@ -101,7 +102,28 @@ public static boolean ishomeomorphictoK5(Grafo g)
101102
102103 public static boolean ishomeomorphictoK33 (Grafo g )
103104 {
104- return true ;
105+ List <Vertice > vertices = g .getVertices ();
106+ vertices = remove2Less (vertices );
107+
108+ if (vertices .size ()<6 )
109+ {
110+ return false ;
111+ }
112+ for (int i = 0 ; i < vertices .size (); i ++) {
113+ List <Vertice > permutaveisM = new ArrayList <>();
114+ List <Vertice > permutaveisN = new ArrayList <>();
115+ permutaveisM .add (vertices .get (i ));
116+ permutaveisM .add (vertices .get ((i +1 )%vertices .size ()));
117+ permutaveisM .add (vertices .get ((i +2 )%vertices .size ()));
118+ permutaveisN .add (vertices .get ((i +3 )%vertices .size ()));
119+ permutaveisN .add (vertices .get ((i +4 )%vertices .size ()));
120+ permutaveisN .add (vertices .get ((i +5 )%vertices .size ()));
121+ if (hasK33 (g , permutaveisM , permutaveisN )){
122+ return true ;
123+ }
124+ System .out .println ("entrou" );
125+ }
126+ return false ;
105127 }
106128
107129 public static boolean hasK5 (Grafo g , List <Vertice > permutaveis )
@@ -111,10 +133,12 @@ public static boolean hasK5(Grafo g, List<Vertice> permutaveis)
111133 for (int i = 0 ; i < permutaveis .size (); i ++) {
112134 for (int j = i ; j < permutaveis .size (); j ++) {
113135 if (i !=j ){
114- if (sa .search (g , permutaveis .get (i ).getId (), permutaveis .get (j ).getId ())==null ){
136+ Vertice v = sa .search (g , permutaveis .get (i ).getId (), permutaveis .get (j ).getId ());
137+ if (v ==null ){
115138 System .out .println ("deu merda " +permutaveis .get (i ).getRotulo ()+" pro " +permutaveis .get (j ).getRotulo ());
116139 return false ;
117140 }
141+ // reajustar_visitados(g, v);
118142 g .getVertice (permutaveis .get (i ).getId ()).setVisitado (false );
119143 g .getVertice (permutaveis .get (j ).getId ()).setVisitado (false );
120144 }
@@ -124,6 +148,28 @@ public static boolean hasK5(Grafo g, List<Vertice> permutaveis)
124148 return true ;
125149 }
126150
151+ public static boolean hasK33 (Grafo g , List <Vertice > permutaveisM , List <Vertice > permutaveisN )
152+ {
153+ g .resetProperties ();
154+ SearchAlgorithm sa = SearchAlgorithmFactory .build (SearchAlgorithmFactory .BREADTH_FIRST_SEARCH );
155+ for (int i = 0 ; i < permutaveisM .size (); i ++) {
156+ for (int j = 0 ; j < permutaveisN .size (); j ++) {
157+ if (i !=j ){
158+ Vertice N = sa .search (g , permutaveisM .get (i ).getId (), permutaveisN .get (j ).getId ());
159+ System .out .println ("Tentar " +permutaveisM .get (i ).getRotulo ()+" pro " +permutaveisN .get (j ).getRotulo ());
160+ if (N ==null ){
161+ System .out .println ("deu merda " +permutaveisM .get (i ).getRotulo ()+" pro " +permutaveisN .get (j ).getRotulo ());
162+ return false ;
163+ }
164+ g .getVertice (permutaveisM .get (i ).getId ()).setVisitado (false );
165+ g .getVertice (permutaveisN .get (j ).getId ()).setVisitado (false );
166+ }
167+ System .out .println ("deboa " +permutaveisM .get (i ).getRotulo ()+" pro " +permutaveisN .get (j ).getRotulo ());
168+ }
169+ }
170+ return true ;
171+ }
172+
127173 public static List <Vertice > remove3Less (List <Vertice > vertices )
128174 {
129175 List <Vertice > higher = new ArrayList <>();
@@ -137,4 +183,36 @@ public static List<Vertice> remove3Less(List<Vertice> vertices)
137183 }
138184 return higher ;
139185 }
186+ public static List <Vertice > remove2Less (List <Vertice > vertices )
187+ {
188+ List <Vertice > higher = new ArrayList <>();
189+
190+ for (Vertice vertice : vertices ) {
191+ System .out .println ("Grau:" +vertice .getGrau ());
192+ if (vertice .getGrau ()>2 ){
193+
194+ higher .add (vertice );
195+ }
196+ }
197+ return higher ;
198+ }
199+
200+ private static void reajustar_visitados (Grafo g , Vertice N ) {
201+ g .resetProperties ();
202+ while (N .getAnterior ()!=null )
203+ {
204+ N = N .getAnterior ();
205+ N .setVisitado (true );
206+ }
207+ N .setVisitado (false );
208+ N .setAnterior (null );
209+ }
210+
211+ private static void print_vizitados (Grafo g ) {
212+ System .out .print ("Visitados: " );
213+ for (Vertice vertice : g .getVertices ()) {
214+ if (vertice .isVisitado ())
215+ System .out .println (vertice .getRotulo ()+" " );
216+ }
217+ }
140218}
0 commit comments