vlatkovski

Rekonstrukcija (NEDOVRSENO)

Jun 10th, 2017
245
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.42 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4.  
  5. using namespace std;
  6.  
  7. typedef pair<int, int> P;
  8. typedef multimap<int, int> MM;
  9.  
  10. void blah(vector<int>&, map<int, int>&, int, int, int, int);
  11.  
  12. int main() {
  13.     int k = 7;
  14.     //cin >> k;
  15.     int INPUT_TEMP[6][2] = {{3, 6}, {4, 1}, {4, 7}, {5, 2}, {6, 1}, {5, 0}};
  16.  
  17.     vector<P> vp; //vektor parovi
  18.     vector<int> v(k + 1, -3); //vektor broevi
  19.  
  20.     v[0] = 0;
  21.     v[k] = k;
  22.  
  23.     map<int, int> sledenje; //first=pozicija, second=index na pozicija vo v
  24.  
  25.  
  26.     for (int i = 0; i < k - 1; ++i) {
  27.         int a = INPUT_TEMP[i][0], b = INPUT_TEMP[i][1];//int a, b;
  28.         //cin >> a >> b;
  29.  
  30.         P p(a, b);
  31.         vp.push_back(p);
  32.  
  33.         sledenje[a] = -2;
  34.         sledenje[b] = -2;
  35.     }
  36.  
  37.     sledenje[0] = 0; //0 e sekogas prv
  38.     sledenje[k] = k; //k e sekogas posleden
  39.  
  40.     for (unsigned int i = 0; i < vp.size(); ++i) {
  41.         blah(v, sledenje, vp[i].first, vp[i].second, -4, -4); //first=a, second=b
  42.     }
  43.  
  44.     for (int i = 0; i <= k; ++i) {
  45.         cout << v[(unsigned)i] << " ";
  46.     }
  47.  
  48. }
  49.  
  50. void mmfuck(vector<int>& v, map<int, int>& sledenje, MM& mmop, int n, int ia, int ib) {
  51.     pair<MM::iterator, MM::iterator> rz = mmop.equal_range(n);
  52.     for (MM::iterator it = rz.first; it != rz.second; ++it) {
  53.         cout << endl << "R" << n << ": ";
  54.         blah(v, sledenje, n, (*it).second, ia, ib); //*it.second = z
  55.     }
  56. }
  57.  
  58. void blah(vector<int>& v, map<int, int>& sledenje, int x, int y, int ix_passed = -4, int iy_passed = -4) {
  59.     static MM mmop; //multimapa ostanati parovi
  60.     pair<MM::iterator, MM::iterator> range_z;
  61.  
  62.     static const int k = v.size() - 1;
  63.  
  64.     //-4 znaci ne e praten parameter
  65.     int ix = ix_passed == -4 ? sledenje[x] : ix_passed;
  66.     int iy = iy_passed == -4 ? sledenje[y] : iy_passed;
  67.  
  68.     cout << "x:" << x << " y:" << y << " ix:" << ix << " iy:" << iy << '\t';
  69.     if (iy != -2 && ix == -2) {
  70.         cout << "\n\t";
  71.         blah(v, sledenje, y, x, iy, ix);
  72.     } else if (iy == -2) {
  73.         if (ix == -2) { //dvata broja ne gi ima do sega vo nizata
  74.             if (x > y) { //napravi taka da x < y
  75.                 int t = x;
  76.                 x = y;
  77.                 y = t;
  78.             }
  79.             mmop.insert(P(x, y)); //dodaj gi da se probaat posle
  80.             mmop.insert(P(y, x));
  81.             cout << "\tdodadeni vo mmop (mmop[" << x << "]=" << y << ", mmop[" << y << "]=" << x << ")\n";
  82.         } else {
  83.             if (ix == 0) {
  84.                 iy = ix + 1;
  85.             } else if (ix == k) {
  86.                 iy = ix - 1;
  87.             } else if (sledenje[ix - 1] != -2) { //ima element pred x
  88.                 iy = ix + 1;
  89.             } else if (sledenje[ix + 1] != -2) { //nema element pred x, ima element posle x
  90.                 iy = ix - 1;
  91.             }
  92.  
  93.             v[iy] = y;
  94.             sledenje[y] = iy;
  95.  
  96.             cout << "v[" << iy << "]:" << v[iy];
  97.  
  98.             /*
  99.                 PLAN
  100.                 sega proveruva dali ima element pred i posle x pred da odluci za y
  101.                 ama ne proveruva vo mmop?
  102.             */
  103.  
  104.  
  105.             pair<MM::iterator, MM::iterator> rz = mmop.equal_range(y);
  106.             for (MM::iterator it = rz.first; it != rz.second; ++it) {
  107.                 cout << endl << "R" << y << ": ";
  108.                 blah(v, sledenje, y, (*it).second, iy, -4); //*it.second = z
  109.             }
  110.             //mmfuck(v, sledenje, mmop, x, ix, -4);
  111.             //mmfuck(v, sledenje, mmop, y, iy, -4);
  112.             /*
  113.                 for (MM::iterator it = range_z.first; it != range_z.second; ++it) {
  114.                     cout << endl << "RX: ";
  115.                     blah(v, sledenje, x, (*it).second, ix, -4); //*it.second = z
  116.                 }
  117.                 range_z = mmop.equal_range(y);
  118.                 for (MM::iterator it = range_z.first; it != range_z.second; ++it) {
  119.                     cout << endl << "RY: ";
  120.                     blah(v, sledenje, x, (*it).second, -4, iy); //*it.second = z
  121.                 }*/
  122.             /*
  123.             int z = mop[x]; //ako ima drug par preostanat
  124.             if (z != 0) {
  125.                 cout << endl << "RX: ";
  126.                 blah(v, sledenje, x, z, ix, -4);
  127.             } else {
  128.                 z = mop[y];
  129.                 if (z != 0) {
  130.                     cout << endl << "RY: ";
  131.                     blah(v, sledenje, y, z, -4, iy);
  132.                 }
  133.             }*/
  134.             cout << endl;
  135.         }
  136.     }
  137.  
  138. };
Advertisement
Add Comment
Please, Sign In to add comment