madzik4113

logistyka rysiek programista

Apr 2nd, 2015
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 20.41 KB | None | 0 0
  1. // logistyka.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <locale>
  7. #include <iomanip>
  8. using namespace std;
  9.  
  10. class Wierzcholek
  11. {
  12. public:
  13.         int nr;
  14.         int t_min;
  15.         int t_max;
  16.         int luz;
  17.         Wierzcholek()
  18.         {
  19.                 t_min = 0;
  20.                 t_max = 0;
  21.                 nr = -1;
  22.                 luz = 0;
  23.         }
  24.         void Wyswietl()
  25.         {
  26.                 cout << "Numer : " << nr << endl;
  27.                 cout << "Min : " << t_min << endl;
  28.                 cout << "Max : " << t_max << endl;
  29.                 cout << "Luz : " << luz << endl;
  30.         }
  31.         void ObliczLuz()
  32.         {
  33.                 luz = t_max - t_min;
  34.         }
  35. };
  36.  
  37. class CPM
  38. {
  39. public:
  40.         int ile_w;//ilość wierzchołków
  41.         int ile_k;//ilość krawędzi
  42.         int tab[100][100];//['wiersze']['kolumny']
  43.  
  44.         Wierzcholek w[100];
  45.         void init()
  46.         {
  47.                 //Czyszczenie
  48.                 for(int i=0;i<100;i++)
  49.                         for(int j=0;j<100;j++)
  50.                                 tab[i][j]=-1;
  51.                         //Interface
  52.                         cout << "Podaj ilość wierzchołków:\n";
  53.                         cin >> ile_w;
  54.                         cout << "Podaj ilość krawędzi:\n";
  55.                         cin >> ile_k;
  56.                 int tmp_p,tmp_k,tmp_t;
  57.                 for(int i=0;i<ile_k;i++)
  58.                 {
  59.                                 cout << "Podaj numer wierzchołka początku krawędzi" << (i+1) << " :\n";
  60.                                 cin >> tmp_p;
  61.                                 cout << "Podaj numer wierzchołka końca krawędzi" << (i+1) << " :\n";
  62.                                 cin >> tmp_k;
  63.                                 cout << "Podaj czas pracy " << (i+1) << " :\n";
  64.                                 cin >> tmp_t;
  65.                                 /*
  66.                                 switch(i)
  67.                                 {
  68.                                         case 0: tmp_p=1;tmp_k=2;tmp_t = 5;
  69.                                         break;
  70.                                         case 1: tmp_p=1;tmp_k=3;tmp_t = 4;
  71.                                         break;
  72.                                         case 2: tmp_p=1;tmp_k=4;tmp_t = 3;
  73.                                         break;
  74.                                         case 3: tmp_p=2;tmp_k=7;tmp_t = 2;
  75.                                         break;
  76.                                         case 4: tmp_p=3;tmp_k=2;tmp_t = 4;
  77.                                         break;
  78.                                         case 5: tmp_p=3;tmp_k=6;tmp_t = 3;
  79.                                         break;
  80.                                         case 6: tmp_p=3;tmp_k=4;tmp_t = 2;
  81.                                         break;
  82.                                         case 7: tmp_p=4;tmp_k=6;tmp_t = 4;
  83.                                         break;
  84.                                         case 8: tmp_p=4;tmp_k=5;tmp_t = 1;
  85.                                         break;
  86.                                         case 9: tmp_p=6;tmp_k=7;tmp_t = 1;
  87.                                         break;
  88.                                         case 10:tmp_p=5;tmp_k=7;tmp_t = 2;
  89.                                         break;
  90.                                 }
  91.                                 */
  92.                         tab[tmp_p-1][tmp_k-1]=tmp_t;
  93.                         tmp_p=tmp_k=tmp_t=0;
  94.                 }
  95.                 Numeruj();
  96.                 //Wyswietl();
  97.                 Sortuj();
  98.                 MinTerminy();
  99.                 MaxTerminy();
  100.                 Luzy();
  101.                 Wyswietl();
  102.                 WyznaczSciezke();
  103.         }
  104.         void Przyklad()
  105.         {
  106.                 //Czyszczenie
  107.                 for(int i=0;i<100;i++)
  108.                         for(int j=0;j<100;j++)
  109.                                 tab[i][j]=-1;
  110.                         ile_w =7;
  111.                         ile_k = 11;
  112.                 int tmp_p,tmp_k,tmp_t;
  113.                 for(int i=0;i<ile_k;i++)
  114.                 {
  115.                                 switch(i)
  116.                                 {
  117.                                         case 0: tmp_p=1;tmp_k=2;tmp_t = 5;
  118.                                         break;
  119.                                         case 1: tmp_p=1;tmp_k=3;tmp_t = 4;
  120.                                         break;
  121.                                         case 2: tmp_p=1;tmp_k=4;tmp_t = 3;
  122.                                         break;
  123.                                         case 3: tmp_p=2;tmp_k=7;tmp_t = 2;
  124.                                         break;
  125.                                         case 4: tmp_p=3;tmp_k=2;tmp_t = 4;
  126.                                         break;
  127.                                         case 5: tmp_p=3;tmp_k=6;tmp_t = 3;
  128.                                         break;
  129.                                         case 6: tmp_p=3;tmp_k=4;tmp_t = 2;
  130.                                         break;
  131.                                         case 7: tmp_p=4;tmp_k=6;tmp_t = 4;
  132.                                         break;
  133.                                         case 8: tmp_p=4;tmp_k=5;tmp_t = 1;
  134.                                         break;
  135.                                         case 9: tmp_p=6;tmp_k=7;tmp_t = 1;
  136.                                         break;
  137.                                         case 10:tmp_p=5;tmp_k=7;tmp_t = 2;
  138.                                         break;
  139.                                 }
  140.                         tab[tmp_p-1][tmp_k-1]=tmp_t;
  141.                         tmp_p=tmp_k=tmp_t=0;
  142.                 }
  143.                 Numeruj();
  144.                 //Wyswietl();
  145.                 Sortuj();
  146.                 MinTerminy();
  147.                 MaxTerminy();
  148.                 Luzy();
  149.                 //Wyswietl();
  150.                 WyznaczSciezke();
  151.         }
  152.         void Przyklad1()
  153.         {
  154.                 //Czyszczenie
  155.                 for(int i=0;i<100;i++)
  156.                         for(int j=0;j<100;j++)
  157.                                 tab[i][j]=-1;
  158.                         ile_w =11;
  159.                         ile_k = 17;
  160.                 int tmp_p,tmp_k,tmp_t;
  161.                 for(int i=0;i<ile_k;i++)
  162.                 {
  163.                                 switch(i)
  164.                                 {
  165.                                         case 0:
  166.                                                 tmp_p=1;
  167.                                                 tmp_k=5;
  168.                                                 tmp_t=2;
  169.                                         break;
  170.                                         case 1:
  171.                                                 tmp_p=1;
  172.                                                 tmp_k=3;
  173.                                                 tmp_t=5;
  174.                                         break;
  175.                                         case 2:
  176.                                                 tmp_p=1;
  177.                                                 tmp_k=2;
  178.                                                 tmp_t=7;
  179.                                         break;
  180.                                         case 3:
  181.                                                 tmp_p=2;
  182.                                                 tmp_k=3;
  183.                                                 tmp_t=0;
  184.                                         break;
  185.                                         case 14:      
  186.                                                 tmp_p=2;
  187.                                                 tmp_k=6;
  188.                                                 tmp_t=7;
  189.                                         break;
  190.                                         case 10:      
  191.                                                 tmp_p=3;
  192.                                                 tmp_k=4;
  193.                                                 tmp_t=10;
  194.                                         break;
  195.                                         case 6:
  196.                                                 tmp_p=4;
  197.                                                 tmp_k=5;
  198.                                                 tmp_t=0;
  199.                                         break;
  200.                                         case 7:
  201.                                                 tmp_p=4;
  202.                                                 tmp_k=7;
  203.                                                 tmp_t=10;
  204.                                         break;
  205.                                         case 8:
  206.                                                 tmp_p=4;
  207.                                                 tmp_k=6;
  208.                                                 tmp_t=0;
  209.                                         break;
  210.                                         case 9:
  211.                                                 tmp_p=5;
  212.                                                 tmp_k=7;
  213.                                                 tmp_t=4;
  214.                                         break;
  215.                                         case 5:
  216.                                                 tmp_p=6;
  217.                                                 tmp_k=7;
  218.                                                 tmp_t=12;
  219.                                         break;
  220.                                         case 13:      
  221.                                                 tmp_p=6;
  222.                                                 tmp_k=9;
  223.                                                 tmp_t=2;
  224.                                         break;
  225.                                         case 12:      
  226.                                                 tmp_p=7;
  227.                                                 tmp_k=10;
  228.                                                 tmp_t=5;
  229.                                         break;
  230.                                         case 11:      
  231.                                                 tmp_p=7;
  232.                                                 tmp_k=8;
  233.                                                 tmp_t=6;
  234.                                         break;
  235.                                         case 4:
  236.                                                 tmp_p=8;
  237.                                                 tmp_k=10;
  238.                                                 tmp_t=2;
  239.                                         break;
  240.                                         case 15:      
  241.                                                 tmp_p=9;
  242.                                                 tmp_k=11;
  243.                                                 tmp_t=2;
  244.                                         break;
  245.                                         case 16:      
  246.                                                 tmp_p=10;
  247.                                                 tmp_k=11;
  248.                                                 tmp_t=6;
  249.                                         break;
  250.                                 }
  251.                         tab[tmp_p-1][tmp_k-1]=tmp_t;
  252.                         tmp_p=tmp_k=tmp_t=0;
  253.                 }
  254.                 Numeruj();
  255.                 //Wyswietl();
  256.                 Sortuj();
  257.                 MinTerminy();
  258.                 MaxTerminy();
  259.                 Luzy();
  260.                 //Wyswietl();
  261.                 WyznaczSciezke();
  262.         }
  263.         void Numeruj() //Numerowanie wierzchołków grafu
  264.         {              
  265.                 bool ss=false;
  266.                 int tmp_tab[100][100];
  267.  
  268.                 //Czyszczenie
  269.                 for(int i=0;i<100;i++)
  270.                         for(int j=0;j<100;j++)
  271.                                 tmp_tab[i][j]=-1;
  272.  
  273.                 //Kopiowanie
  274.                 for(int i=0;i<ile_w;i++)
  275.                         for(int j=0;j<ile_w;j++)
  276.                                 tmp_tab[i][j]=tab[i][j];
  277.  
  278.                 //Wyznaczam Pierwszy
  279.                 for(int k=0;k<ile_w;k++)
  280.                 {
  281.                         for(int i=0;i<ile_w;i++)
  282.                         {
  283.                                 ss=false;
  284.                                 for(int j=0;j<ile_w;j++)
  285.                                         if(tmp_tab[j][i] != -1 || tmp_tab[j][i] == -2)
  286.                                                 ss=true;
  287.                                 if(ss == false)
  288.                                 {
  289.                                         w[i].nr=k;
  290.                                                 for(int j=0;j<ile_w;j++)
  291.                                                 {
  292.                                                         if(tmp_tab[i][j] != -2)
  293.                                                                 tmp_tab[i][j] = -1;
  294.                                                 }
  295.                                                 for(int j=0;j<ile_w;j++)
  296.                                                 {
  297.                                                         tmp_tab[j][i] = -2;
  298.                                                 }
  299.                                         //cout << k << "-" << i << endl;
  300.                                         break;
  301.                                 }
  302.                         }
  303.                 }
  304.  
  305.         }
  306.         void Sortuj() //Numerowanie wierzchołków grafu
  307.         {              
  308.                 int tmp_tab[100][100],id,tmp,changes[100];
  309.  
  310.                 //Czyszczenie
  311.                 for(int i=0;i<100;i++)
  312.                         for(int j=0;j<100;j++)
  313.                         {
  314.                                 tmp_tab[i][j]=-1;
  315.                                 changes[i]=NULL;
  316.                         }
  317.  
  318.                 //Kopiowanie
  319.                 for(int i=0;i<ile_w;i++)
  320.                         for(int j=0;j<ile_w;j++)
  321.                                 tmp_tab[i][j]=tab[i][j];
  322.                
  323.                 //Czyszczenie
  324.                 for(int i=0;i<100;i++)
  325.                         for(int j=0;j<100;j++)
  326.                                 tab[i][j]=-1;
  327.                 //Sortuje
  328.                 for(int k=0;k<ile_w;k++)
  329.                 {
  330.                         if(k == 0)
  331.                                 id=0;
  332.                         else
  333.                         {
  334.                                 for(int i=0;i<ile_w;i++)
  335.                                 if(w[i].nr == k)
  336.                                 {
  337.                                         id = i;
  338.                                         break;
  339.                                 }
  340.                         }
  341.                         //Zamiana miejsccami kolumn i wierszy
  342.                         for(int j=0;j<ile_w;j++)
  343.                                 tab[k][j]=tmp_tab[id][j];
  344.                         if(k != id)
  345.                         {              
  346.                                 bool ch = false;
  347.                                 for(int l=0;l<ile_w;l++)
  348.                                         if(changes[l] == k || changes[l] == id)
  349.                                                 ch = true;
  350.                                 //cout << k << '-' << id <<endl;
  351.                                 w[id].nr = id;
  352.                                 if(!ch)
  353.                                 {
  354.                                         for(int j=0;j<ile_w;j++)
  355.                                         {
  356.                                                 tmp = tab[j][k];
  357.                                                 tab[j][k] = tab[j][id];
  358.                                                 tab[j][id] = tmp;                              
  359.                                         }
  360.                                         changes[k]=k;
  361.                                 }
  362.                         }
  363.                 }
  364.         }
  365.         void MinTerminy()
  366.         {
  367.                 int min[100],ile=0;
  368.  
  369.                 //Czyszczenie
  370.                 for(int i=0;i<100;i++)
  371.                         min[i]=NULL;
  372.  
  373.                 //Wyznaczam Pierwszy
  374.                 for(int k=1;k<ile_w;k++)
  375.                 {
  376.                         for(int i=0;i<ile_w;i++)
  377.                                 if(tab[i][k] >= 0)
  378.                                 {
  379.                                         min[ile] = tab[i][k]+w[i].t_min;
  380.                                         ile++;
  381.                                 }
  382.                         if(ile < 2)
  383.                         {
  384.                                 w[k].t_min = min[0];
  385.                                 min[0] = 0;
  386.                         } else {
  387.                                 for(int i=1;i<ile;i++)
  388.                                         if(min[0] < min[i])
  389.                                                 min[0] = min[i];
  390.                                 w[k].t_min = min[0];
  391.                         //Czyszczenie
  392.                         for(int i=0;i<100;i++)
  393.                                 min[i]=NULL;
  394.                         }
  395.                         ile=0;
  396.                         //cout << k << "-" << w[k].nr << " -> " << w[k].t_min <<endl;
  397.                 }
  398.         }
  399.         void MaxTerminy()
  400.         {
  401.                 int max[100],ile=0;
  402.  
  403.                 //Czyszczenie
  404.                 for(int i=0;i<100;i++)
  405.                         max[i]=NULL;
  406.                 //Wyznaczam Pierwszy
  407.                 w[ile_w-1].t_max = w[ile_w-1].t_min;
  408.                 for(int k=ile_w-2;k>=0;k--)
  409.                 {
  410.                         for(int i=0;i<ile_w;i++)
  411.                                 if(tab[k][i] >= 0)
  412.                                 {
  413.                                         max[ile] = w[i].t_max-tab[k][i];
  414.                                         ile++;
  415.                                 }
  416.                         if(ile < 2)
  417.                         {
  418.                                 w[k].t_max = max[0];
  419.                                 max[0] = 0;
  420.                         } else {
  421.                                 for(int i=1;i<ile;i++)
  422.                                         if(max[0] > max[i])
  423.                                                 max[0] = max[i];
  424.                                 w[k].t_max = max[0];
  425.                         //Czyszczenie
  426.                         for(int i=0;i<100;i++)
  427.                                 max[i]=NULL;
  428.                         }
  429.                         ile=0;
  430.                         //cout << k << "->" << w[k].t_max <<endl;
  431.                 }
  432.         }
  433.         void Luzy()
  434.         {
  435.                 for(int i=0;i<ile_w;i++)
  436.                         w[i].ObliczLuz();
  437.         }
  438.         void WyznaczSciezke()
  439.         {
  440.                 int wynik=0;
  441.                 for(int k=0;k<ile_w;k++)
  442.                         for(int i=0;i<ile_w;i++)
  443.                         {
  444.                                 if(tab[k][i] >= 0)
  445.                                 {
  446.                                         wynik = w[i].t_max - w[k].t_min - tab[k][i];
  447.                                                 //cout << wynik << "  " << endl;
  448.                                         if(wynik == 0 && w[i].luz == 0)
  449.                                         {
  450.                                                 cout << (k+1) << " -> ";
  451.                                                 if((k+2) == ile_w)
  452.                                                         cout << (k+2);
  453.                                         }
  454.                                 }
  455.                                 wynik=0;
  456.                         }
  457.         }
  458.         void Wyswietl()
  459.         {
  460.            cout << endl;
  461.                 for(int i=0;i<ile_w;i++)
  462.            {
  463.                   for(int j=0;j<ile_w;j++)
  464.                   {
  465.                           if(tab[i][j] >= 0)
  466.                                 cout << setw(3) << tab[i][j];
  467.                           else
  468.                                   cout << setw(3) << "-";
  469.                   }
  470.                   cout << endl;
  471.            }
  472.                 for(int i=0;i<ile_w;i++)
  473.                 {
  474.                         w[i].Wyswietl();
  475.                         cout << endl;
  476.                 }
  477.         }
  478. };
  479.  
  480.  
  481.         int _tmain(int argc, _TCHAR* argv[])
  482.         {
  483.            //Ustawienia kodowania polskich znaków
  484.         locale myloc ("Polish");
  485.         locale oldloc = locale::global (myloc);
  486.  
  487.                 CPM *engine = new CPM();
  488.                // engine->init();//Wpiszujesz z palca
  489.                // engine->Przyklad();//Automat
  490.                 engine->Przyklad1();//Automat
  491.  
  492.         locale::global (oldloc);
  493.  
  494.         cin.ignore();
  495.         cin.get();
  496.         return 0;
  497.         }
Advertisement
Add Comment
Please, Sign In to add comment