Skip to content

Commit ad80556

Browse files
committed
K33 ainda falho
1 parent 857b582 commit ad80556

2 files changed

Lines changed: 86 additions & 2 deletions

File tree

src/core/algoritmos/PlanarityTest.java

Lines changed: 80 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

src/core/model/Grafo.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,12 @@ public void resetProperties(){
180180
}
181181
visitados = new ArrayList<>();
182182
}
183+
184+
public void resetAnteriores(){
185+
for (Vertice vertice : vertices) {
186+
vertice.setAnterior(null);
187+
}
188+
}
183189

184190
public boolean verificarVisitados() {
185191
for(Vertice vertice : vertices){

0 commit comments

Comments
 (0)