diff --git a/src/floyd_warshall.h b/src/floyd_warshall.h index 96c7b0ba0adfebefd98252d5a083fea670a2ca6c..348914c2009de4bbd6fe23c8920c14e8ca948a35 100644 --- a/src/floyd_warshall.h +++ b/src/floyd_warshall.h @@ -27,13 +27,13 @@ class FloydWarshall { * Imprime caminho, que deve ser calculado previamente. * @return 0 se for impresso alguma coisa, 1 caso contrário. */ - int imprimir_caminho(int final) { + int imprimir_caminho(int inicial, int fin) { - std::list<t_vertice> caminho = listar_caminho(final); + std::list<int> caminho = listar_caminho(inicial, fin); std::cout << "Caminho: "; std::copy(caminho.begin(), caminho.end(), - std::ostream_iterator<t_vertice>(std::cout, " ")); + std::ostream_iterator<int>(std::cout, " ")); std::cout << std::endl; return 0; @@ -104,11 +104,11 @@ class FloydWarshall { return 0; } - std::list<t_vertice> listar_caminho(t_vertice vertice) { + std::list<int> listar_caminho(int inicial, int fin) { - std::list<t_vertice> path; - for ( ; vertice != -1; vertice = vet_anteriores_[vertice]) { - path.push_front(vertice); + std::list<int> path; + for (int vertice = inicial; vertice != -1; vertice = grafo_proximos_.get_value(vertice, fin)) { + path.push_back(vertice); } return path; @@ -121,12 +121,11 @@ class FloydWarshall { void imprime_grafo() { std::cout << grafo_ << std::endl; + //std::cout << grafo_proximos_ << std::endl; } protected: t_matriz_adjacencia grafo_, grafo_proximos_; - std::vector<t_vertice> vet_anteriores_; - std::vector<t_peso> vet_distancia_; }; @@ -155,7 +154,7 @@ class FloydWarshallSerial: public FloydWarshall { if (lik + lkj < lij) { //std::cout << "Atualizando..." << std::endl; grafo_.values_[i * n + j] = lik + lkj; - //grafo_proximos_.set_value(i, j, m.get_value(i, k)); + //grafo_proximos_.set_value(i, j, k); } } } @@ -193,7 +192,7 @@ class FloydWarshallParalelo: public FloydWarshall { if (lik + lkj < lij) { //std::cout << "Atualizando..." << std::endl; grafo_.values_[i * n + j] = lik + lkj; - //grafo_proximos_.set_value(i, j, m.get_value(i, k)); + //grafo_proximos_.set_value(i, j, k); } } } diff --git a/src/main_floyd_warshall.cpp b/src/main_floyd_warshall.cpp index 0660e042f2d7f66addb935ad05ed2345dd869ca5..2d68209f79ad07cde0eab3e270ccb149954cc684 100644 --- a/src/main_floyd_warshall.cpp +++ b/src/main_floyd_warshall.cpp @@ -27,7 +27,7 @@ int main(int argc, char **argv) { std::cout << "Calculando Paralelo..." << std::endl; floyd_warshall_paralelo.calcular_caminho(qtde_vertices); floyd_warshall_paralelo.imprime_grafo(); - //floyd_warshall_paralelo.imprimir_caminho(v_final); + //floyd_warshall_paralelo.imprimir_caminho(3, 1); } #else @@ -39,7 +39,7 @@ int main(int argc, char **argv) { std::cout << "Calculando Serial..." << std::endl; floyd_warshall_serial.calcular_caminho(qtde_vertices); floyd_warshall_serial.imprime_grafo(); - //floyd_warshall_serial.imprimir_caminho(v_final); + //floyd_warshall_paralelo.imprimir_caminho(3, 1); } #endif diff --git a/src/tipos_floyd_warshall.h b/src/tipos_floyd_warshall.h index 71eb1f7a86c756154b7db2cd041df3de4b909116..34cdac14560f6b13a9570a34ee86a9b95ac28136 100644 --- a/src/tipos_floyd_warshall.h +++ b/src/tipos_floyd_warshall.h @@ -1,21 +1,4 @@ #pragma once #define INC_ALLOC 5000 -typedef double t_distancia; -typedef double t_peso; -typedef int t_vertice; - -typedef struct vizinho { - t_vertice parceiro; /* a quem está ligado */ - t_vertice proximo; /* qual é o próximo vértice para andar até chegar */ - t_peso distancia; /* qual a distancia para chegar */ - t_peso peso; /* peso da aresta que liga ao parceiro */ - vizinho(t_vertice arg_parceiro, t_peso arg_peso): - parceiro(arg_parceiro), - proximo(-1), - distancia(arg_peso), - peso(arg_peso) { - }; -} vizinho; - typedef Matrix<double> t_matriz_adjacencia;