Advertisement
Guest User

Untitled

a guest
Apr 27th, 2017
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.18 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4.  
  5. const int infinity = INT_MAX;  //обозначение несуществующего пути из одной вершины в другую
  6.  
  7.  
  8. class Graph {
  9.     size_t size;  //размер графа (кол-во вершин)
  10.     int **matrix;  //матрица смежности
  11.  
  12. public:
  13.     //конструктор графа (надо переделать со вводом из файла)
  14.     Graph(std::istream &in) {
  15.         in >> size;
  16.  
  17.         matrix = new int*[size];
  18.         for (size_t i = 0; i < size; ++i)
  19.             matrix[i] = new int[size];
  20.  
  21.         for (size_t i = 0; i < size; ++i) {
  22.             for (size_t j = 0; j < size; ++j) {
  23.                 in >> matrix[i][j];
  24.             }
  25.         }
  26.     }
  27.  
  28.     //вывод матрицы на экран
  29.     void show() {
  30.         for (size_t i = 0; i < size; ++i) {
  31.             for (size_t j = 0; j < size; ++j) {
  32.                 std::cout << matrix[i][j]<< " ";
  33.             }
  34.             std::cout << std::endl;
  35.         }
  36.     }
  37.  
  38.     //дальше методы нашего алгоритма
  39.     void alg_floyd() {
  40.         int x;
  41.         for (size_t k = 0; k < size; ++k) {
  42.             for (size_t i = 0; i < size; ++i) {
  43.                 for (size_t j = 0; j < size; ++j) {
  44.                     if ((k == i) || (k == j) || (i == j)
  45.                         || (matrix[i][k] == infinity) || (matrix[k][j] == infinity)) continue;
  46.                     if (matrix[i][j] >= (matrix[i][k] + matrix[k][j])) {
  47.                         x = (matrix[i][k] + matrix[k][j]);
  48.                         matrix[i][j] = x;
  49.                     }
  50.                 }
  51.             }
  52.         }
  53.     }
  54.  
  55.     void short_path(int x, int y) {
  56.         std::cout << x;
  57.         std::cout << " - " << matrix[x][y] << " - ";
  58.         std::cout << y;
  59.     }
  60.  
  61.  
  62.  
  63. };
  64.  
  65. int main()
  66. {
  67.     std::ifstream in("input.txt");
  68.     Graph object(std::cin);
  69.     object.show();
  70.     std::cout << "\n\n";
  71.     object.alg_floyd();
  72.     object.show();
  73.     std::cout << "Enter vershini: \n";
  74.     char x, y;
  75.     std:: cin >> x >> y;
  76.     object.short_path(x, y);
  77.  
  78.     system("pause");
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement