Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <iostream>
- #include "locale.h"
- #include <vector>
- #include <algorithm>
- #include <string>
- using namespace std;
- struct item {
- // время ст.1, ст.2, № детали
- int m1, m2, id;
- };
- //вывод списка деталей
- void printall(const vector<item> &vec, const vector<string>& al)
- {
- cout << "\nСт 1\t" << "Ст 2\t" << "Деталь\t" << endl;
- for (int i = 0; i < vec.size(); i++)
- {
- cout << vec[i].m1 << "\t" << vec[i].m2 << "\t" << al[vec[i].id] << endl;
- }
- }
- //поиск детали с наименьшим временем обработки на любом из станков
- int searchmin (const vector<item>& vec)
- {
- int cnt = 0;
- int temp = vec[0].m1;
- for (int i = 0; i < vec.size(); i++)
- {
- if (temp > vec[i].m1 || temp > vec[i].m2) {
- if (vec[i].m1 > vec[i].m2)
- temp = vec[i].m2;
- else temp = vec[i].m1;
- cnt = i;
- }
- }
- return cnt;
- }
- //второй пункт алгоритма
- vector<item> sortv(vector<item> vec1)
- {
- vector<item> temp, temp2;
- while (vec1.size()>0)
- {
- int tmp = searchmin(vec1);
- //сравниваем время на 1 и 2 станках
- if (vec1[tmp].m1 > vec1[tmp].m2)
- //если на 2 станке время меньше,
- //помещаем деталь в конец 2-го вектора (и наоборот)
- temp2.push_back(vec1[tmp]);
- else
- temp.push_back(vec1[tmp]);
- vec1.erase(vec1.begin() +tmp);
- }
- //переворачиваем второй вектор и добавляем значения в первый
- for (int i = temp2.size(); i > 0; i--) {
- temp.push_back(temp2[i-1]);
- }
- return temp;
- }
- vector<string> alphin()
- {
- vector<string> v;
- v.push_back("А"); v.push_back("Б");
- v.push_back("В"); v.push_back("Г");
- v.push_back("Д"); v.push_back("Е");
- v.push_back("Ж"); v.push_back("З");
- v.push_back("И"); v.push_back("К");
- v.push_back("Л"); v.push_back("М");
- return v;
- }
- int main() {
- setlocale(LC_ALL, "Rus");
- vector<item> a, b;
- vector<string> alph;
- alph = alphin();
- cout << "Мазнев, 598-2, вариант - 9" << endl << endl;
- //ввод времени кол-ва деталей и времени обработки деталей
- int NUMBER=0;
- cout << "Введите число деталей: ";
- cin >> NUMBER;
- cout << "Введите время обработки деталей (одной строкой,"
- "\nразделив пробелами, либо парами через Enter)"<<endl;
- for (int i = 0; i < NUMBER; i++) {
- item temp;
- cin >> temp.m1 >> temp.m2; temp.id = i;
- a.push_back(temp);
- }
- cout << "\nИсходное расписание:"<<endl;
- printall(a, alph);
- b=sortv(a);
- cout << "\nОптимальное расписание:"<<endl;
- printall(b, alph);
- return 0; }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement