Advertisement
lossyy

Johnson's algorithm

May 18th, 2020
385
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.82 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include "locale.h"
  4. #include <vector>
  5. #include <algorithm>
  6. #include <string>
  7. using namespace std;
  8.  
  9. struct item {
  10.     // время ст.1, ст.2, № детали
  11.     int m1, m2, id;
  12. };
  13.  
  14. //вывод списка деталей
  15. void printall(const vector<item> &vec, const vector<string>& al)
  16. {
  17.     cout << "\nСт 1\t" << "Ст 2\t" << "Деталь\t" << endl;
  18.     for (int i = 0; i < vec.size(); i++)
  19.     {
  20.         cout << vec[i].m1 << "\t" << vec[i].m2 << "\t" << al[vec[i].id] << endl;
  21.     }
  22. }
  23.  
  24. //поиск детали с наименьшим временем обработки на любом из станков
  25. int searchmin (const vector<item>& vec)
  26. {
  27.     int cnt = 0;
  28.     int temp = vec[0].m1;
  29.     for (int i = 0; i < vec.size(); i++)
  30.     {
  31.         if (temp > vec[i].m1 || temp > vec[i].m2) {
  32.             if (vec[i].m1 > vec[i].m2)
  33.                 temp = vec[i].m2;
  34.             else temp = vec[i].m1;
  35.             cnt = i;
  36.         }
  37.     }
  38.     return cnt;
  39. }
  40.  
  41. //второй пункт алгоритма
  42. vector<item> sortv(vector<item> vec1)
  43. {
  44.     vector<item> temp, temp2;
  45.     while (vec1.size()>0)
  46.     {
  47.         int tmp = searchmin(vec1);
  48.         //сравниваем время на 1 и 2 станках
  49.         if (vec1[tmp].m1 > vec1[tmp].m2)
  50.         //если на 2 станке время меньше,
  51.         //помещаем деталь в конец 2-го вектора (и наоборот)
  52.             temp2.push_back(vec1[tmp]);
  53.         else
  54.             temp.push_back(vec1[tmp]);
  55.         vec1.erase(vec1.begin() +tmp);
  56.     }
  57.     //переворачиваем второй вектор и добавляем значения в первый
  58.     for (int i = temp2.size(); i > 0; i--) {
  59.         temp.push_back(temp2[i-1]);
  60.     }
  61.     return temp;
  62. }
  63.  
  64. vector<string> alphin()
  65. {
  66.     vector<string> v;
  67.     v.push_back("А");  v.push_back("Б");
  68.     v.push_back("В");  v.push_back("Г");
  69.     v.push_back("Д");  v.push_back("Е");
  70.     v.push_back("Ж");  v.push_back("З");
  71.     v.push_back("И");  v.push_back("К");
  72.     v.push_back("Л");  v.push_back("М");
  73.     return v;
  74. }
  75.  
  76. int main() {
  77.  
  78.     setlocale(LC_ALL, "Rus");
  79.     vector<item> a, b;
  80.     vector<string> alph;
  81.     alph = alphin();
  82.     cout << "Мазнев, 598-2, вариант - 9" << endl << endl;
  83.     //ввод времени кол-ва деталей и времени обработки деталей
  84.     int NUMBER=0;
  85.     cout << "Введите число деталей: ";
  86.     cin >> NUMBER;
  87.     cout << "Введите время обработки деталей (одной строкой,"
  88.     "\nразделив пробелами, либо парами через Enter)"<<endl;
  89.     for (int i = 0; i < NUMBER; i++) {
  90.         item temp;
  91.         cin >> temp.m1 >> temp.m2; temp.id = i;
  92.         a.push_back(temp);
  93.     }
  94.     cout << "\nИсходное расписание:"<<endl;
  95.     printall(a, alph);
  96.     b=sortv(a);
  97.     cout << "\nОптимальное расписание:"<<endl;
  98.     printall(b, alph);
  99.     return 0; }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement