Advertisement
stuxjkee

Untitled

May 13th, 2015
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.70 KB | None | 0 0
  1. // floyd.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "Helper.h"
  6.  
  7. const char* mainMenu[3] = { "Запустити програму", "Про програму", "Вихiд" };
  8. const char* printMenu[2] = { "Результат на консоль", "Результат у файл" };
  9. const char* workMenu[4] = { "Прочитати консоль", "Прочитати файл", "Розрахувати", "Вихiд" };
  10.  
  11. const int MAX = 50;
  12. int* d[MAX];
  13. int c[MAX][MAX];
  14. int n = MAX;
  15. int A, B, C, D;
  16. bool ready = false;
  17. vector<int> answ;
  18.  
  19.  
  20. void getPath(int i, int j, vector<int> &v) {
  21.     if (i == j) {
  22.         v.push_back(j + 1);
  23.     }
  24.     else {
  25.         getPath(i, c[i][j], v);
  26.         v.push_back(j + 1);
  27.     }
  28. }
  29.  
  30. void work() {
  31.     int p = 0;
  32.     bool reReaded = false;
  33.     do {
  34.         p = showMenu(workMenu, 4);
  35.         switch (p) {
  36.         case 0: {
  37.             getFromConsole(d, n, A, B, C, D);
  38.             ready = true;
  39.             reReaded = true;
  40.             printMatrix(d, n);
  41.             wait;
  42.             break;
  43.         }
  44.         case 1: {
  45.             bool fl = getFromFile(d, n, A, B, C, D);
  46.             if (fl) {
  47.                 printMatrix(d, n);
  48.                 ready = true;
  49.                 reReaded = true;
  50.             }
  51.             else {
  52.                 cout << "Файл пошкоджено або даннi некоректнi" << endl;
  53.             }
  54.             wait;
  55.             break;
  56.         }
  57.         case 2: {
  58.  
  59.             if (ready) {
  60.  
  61.                 if (reReaded) {
  62.  
  63.                     for (int i = 0; i < n; i++) {
  64.                         for (int j = 0; j < n; j++) {
  65.                             c[i][j] = i;
  66.                         }
  67.                     }
  68.  
  69.                     for (int k = 0; k < n; ++k) {
  70.                         for (int i = 0; i < n; ++i) {
  71.                             for (int j = 0; j < n; ++j) {
  72.                                 if (d[i][j] > d[i][k] + d[k][j]) {
  73.                                     d[i][j] = d[i][k] + d[k][j];
  74.                                     c[i][j] = c[k][j];
  75.                                 }
  76.  
  77.                             }
  78.                         }
  79.                     }
  80.  
  81.  
  82.  
  83.                     vector<int> a;
  84.                     vector<int> b;
  85.                     answ.clear();
  86.  
  87.                     getPath(A - 1, B - 1, a);
  88.                     getPath(C - 1, D - 1, b);
  89.  
  90.                     /*for (int i = 0; i < a.size(); i++) {
  91.                         cout << a.at(i) << " ";
  92.                     }
  93.  
  94.                     cout << endl;
  95.  
  96.                     for (int i = 0; i < b.size(); i++) {
  97.                         cout << b.at(i) << " ";
  98.                     }
  99.  
  100.                     cout << endl;
  101.                     wait;*/
  102.  
  103.                     for (int i = 0; i < a.size(); i++) {
  104.                         if (find(b.begin(), b.end(), a.at(i)) != b.end()) {
  105.                             answ.push_back(a.at(i));
  106.                         }
  107.                     }
  108.  
  109.                 }
  110.                 reReaded = false;
  111.                 int p = showMenu(printMenu, 2);
  112.  
  113.                 if (p == 0) {
  114.                     cls;
  115.  
  116.                     //printMatrix(d, 6);
  117.  
  118.                    
  119.  
  120.                     if (answ.size() == 0) {
  121.                         cout << "Найкоротшi вiдстанi з заданих вершин не перетинаються" << endl;
  122.                     }
  123.                     else {
  124.                         cout << "Список вершин, в яких перетинаються найкоротшi вiдстанi: ";
  125.                     }
  126.                     for (int i = 0; i < answ.size(); i++) {
  127.                         cout << answ.at(i) << ", ";
  128.                     }
  129.                     cout << endl;
  130.  
  131.                     wait;
  132.                 }
  133.                 else {
  134.                     ofstream out("output.txt");
  135.                     if (answ.size() == 0) {
  136.                         out << "Найкоротшi вiдстанi з заданих вершин не перетинаються" << endl;
  137.                     }
  138.                     else {
  139.                         out << "Список вершин, в яких перетинаються найкоротшi вiдстанi: ";
  140.                     }
  141.                     for (int i = 0; i < answ.size(); i++) {
  142.                         out << answ.at(i)<< ", ";
  143.                     }
  144.                     out << endl;
  145.                     cls;
  146.                     cout << "Результат виведено у файл output.txt" << endl;
  147.                     wait;
  148.                 }
  149.                
  150.             }
  151.             else {
  152.                 cls;
  153.                 cout << "Вiдсутнi вхiднi даннi" << endl;
  154.                 wait;
  155.             }
  156.             break;
  157.         }
  158.         }
  159.    
  160.  
  161.     } while (p != 3);
  162. }
  163.  
  164. int main() {
  165.  
  166.     setlocale(LC_ALL, "");
  167.  
  168.    
  169.     int p = 0;
  170.  
  171.     do {
  172.         p = showMenu(mainMenu, 3);
  173.                 switch (p) {
  174.         case 0:
  175.             work();
  176.             break;
  177.         case 1:
  178.             showAbout();
  179.             break;
  180.         }
  181.     } while (p != 2);
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement