Advertisement
Guest User

Untitled

a guest
Jun 18th, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.99 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <conio.h>
  4. using namespace std;
  5. #define INF 99999
  6.  
  7. void dibujar(vector<vector<int>> v) {
  8. cout << " |" << "\t";
  9. for (int i = 0; i<v.size(); i++)
  10. cout << i << "\t";
  11. cout << endl;
  12. cout << "------------------------------------" << endl;
  13. for (int i = 0; i<v.size(); i++) {
  14. cout << i << " |" << "\t";
  15. for (int j = 0; j<v.size(); j++) {
  16. if (i == j) cout << "-\t";
  17. else {
  18. if (v[i][j] == INF) cout << "inf\t";
  19. if (v[i][j] != INF) cout << v[i][j] << "\t";
  20. }
  21. }
  22. cout << endl;
  23. }
  24. }
  25.  
  26. void floyd_warshal(vector<vector<int>> v, int n) {
  27. vector<vector<int>> dist;
  28. vector<vector<int>> recor;
  29.  
  30. //iniciar vector de vector
  31. vector<int> aux;
  32. for (int i = 0; i < n; i++)
  33. aux.push_back(INF);
  34.  
  35. for (int i = 0; i < n; i++) {
  36. dist.push_back(aux);
  37. recor.push_back(aux);
  38. }
  39.  
  40. for (int i = 0; i<n; i++) {
  41. for (int j = 0; j<n; j++) {
  42. recor[i][j] = j;
  43. }
  44. }
  45.  
  46. for (int i = 0; i<n; i++)
  47. for (int j = 0; j<n; j++)
  48. dist[i][j] = v[i][j];
  49.  
  50. for (int k = 0; k<n; k++) {
  51. for (int i = 0; i<n; i++) {
  52. for (int j = 0; j<n; j++) {
  53. if (dist[i][k] + dist[k][j]<dist[i][j]) {
  54. dist[i][j] = dist[i][k] + dist[k][j];
  55. recor[i][j] = k;
  56. }
  57. }
  58. }
  59. }
  60. cout << "Tabla de Distancia: " << endl << endl;
  61. dibujar(dist);
  62. cout << endl;
  63. cout << "Tabla de Recorrido: " << endl << endl;
  64. dibujar(recor);
  65. }
  66.  
  67. /*
  68. Caso de prueba
  69. 4
  70. 5
  71. 0 1 3
  72. 0 2 4
  73. 1 3 5
  74. 2 3 3
  75. 3 0 8
  76. */
  77.  
  78. int main() {
  79. int a, b, w, m, n;
  80. freopen("in.txt", "r", stdin);
  81. cin >> n >> m;
  82.  
  83. //iniciar vector de vector
  84. vector<vector<int>> v;
  85. vector<int> aux;
  86.  
  87. for (int i = 0; i < n; i++)
  88. aux.push_back(INF);
  89.  
  90. for (int i = 0; i < n; i++)
  91. v.push_back(aux);
  92.  
  93. for (int i = 0; i<n; i++) {
  94. for (int j = 0; j<n; j++)
  95. if (i == j) v[i][j] = 0;
  96. }
  97.  
  98. //insertar aristas
  99. for (int i = 0; i<m; i++) {
  100. cin >> a >> b >> w;
  101. v[a][b] = w;
  102. //v[b][a]=w;
  103. }
  104. floyd_warshal(v, n);
  105.  
  106. _getch();
  107. return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement