-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAlgoritmoRobertsEFlores.java
66 lines (53 loc) · 1.65 KB
/
AlgoritmoRobertsEFlores.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package Trabalho3;
import java.util.LinkedList;
public class AlgoritmoRobertsEFlores {
private LinkedList<Vertice> listaVertices;
private int qtdVerticesGrafo;
private Vertice verticeInicial;
private boolean ehHamiltoniano;
public AlgoritmoRobertsEFlores(Grafo g) {
ehHamiltoniano = false;
listaVertices = new LinkedList<>();
qtdVerticesGrafo = g.getVertices().length;
// O algoritmo de RobertsEFlores implementado aqui define o 0 como vertice
// inicial, porém algoritmo funciona comecando por qualquer vertice.
verticeInicial = g.getVertices()[0];
listaVertices.add(verticeInicial);
percorreVertice(verticeInicial);
if (!ehHamiltoniano) {
imprimeResultado();
}
}
private void percorreVertice(Vertice v) {
for (int i = 0; i < v.getAdj().size(); i++) {
if (ehHamiltoniano) {
break;
}
Vertice verticeAdj = v.getAdj().get(i);
if (!listaVertices.contains(verticeAdj)) {
listaVertices.add(verticeAdj);
// Verifica se encontrou um ciclo hamiltoniano
if (listaVertices.size() == qtdVerticesGrafo
&& listaVertices.get(0).getAdj().contains(listaVertices.get(listaVertices.size() - 1))) {
ehHamiltoniano = true;
imprimeResultado();
}
percorreVertice(verticeAdj);
}
if (i == v.getAdj().size() - 1) {
listaVertices.removeLast();
}
}
}
private void imprimeResultado() {
if (ehHamiltoniano) {
System.out.print("O Grafo é Hamiltoniano e o Ciclo Hamiltoniano é: ");
for (Vertice vertice : listaVertices) {
System.out.print(vertice.getNome() + " ");
}
System.out.print(verticeInicial.getNome());
} else {
System.out.println("O Grafo não é Hamiltoniano.");
}
}
}