Advertisement
Siwy_Krzysiek

Problem Hetmanów

Jan 23rd, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.20 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <vector>
  4.  
  5. using std::vector;
  6.  
  7. using namespace std;
  8.  
  9. class Hetman
  10. {
  11. public:
  12.     int x;
  13.     int y;
  14.     int wielkosc;
  15.     bool aktywny;
  16.     vector<vector<bool> > atakowanePola;
  17.  
  18.     //bool* atakowanePola;
  19.     //bool** atakowanePola2;
  20.  
  21. public:
  22.     Hetman()
  23.     {
  24.         x=0;
  25.         y=0;
  26.         aktywny=false;
  27.  
  28. //        bool atakowanePola2 = new bool*[3];
  29. //        for (int i = 0; i < 3; ++i )
  30. //        {
  31. //           atakowanePola2[i] = new bool[3];
  32. //        }
  33.     }
  34.  
  35.     Hetman(int wielkosc, int x, int y)
  36.     {
  37.         this->x=x;
  38.         this->y=y;
  39.         this->wielkosc=wielkosc;
  40.         aktywny=true;
  41.  
  42.         atakowanePola.resize(wielkosc);
  43.         for(int i=0; i<wielkosc; i++)
  44.             atakowanePola[i].resize(wielkosc);
  45.  
  46.  
  47.         for(int i=0; i<wielkosc; i++)
  48.         {
  49.             for(int j=0; j<wielkosc; j++)
  50.             {
  51.                 if(i==y)
  52.                     atakowanePola[i][j]=true;
  53.                 if(j==x)
  54.                     atakowanePola[i][j]=true;
  55.                 if(abs(y-i)==abs(x-j))
  56.                     atakowanePola[i][j]=true;
  57.             }
  58.         }
  59.             //pokazAtak();
  60.  
  61. //        atakowanePola = new bool[wielkosc*wielkosc];
  62. //        for(int i=0; i<wielkosc*wielkosc; i++) atakowanePola[i]=false;
  63. //
  64. //        for(int i=0; i<wielkosc*wielkosc; i++)
  65. //        {
  66. //            if(x%wielkosc==i%wielkosc) atakowanePola[i]=true;
  67. //
  68. //        }
  69.     }
  70.  
  71.     void ustaw(int wielkosc, int x, int y)
  72.     {
  73.         this->x=x;
  74.         this->y=y;
  75.         this->wielkosc=wielkosc;
  76.         aktywny=true;
  77.  
  78.         atakowanePola.resize(wielkosc);
  79.         for(int i=0; i<wielkosc; i++)
  80.             atakowanePola[i].resize(wielkosc);
  81.  
  82.         czysc();
  83.  
  84.  
  85.         for(int i=0; i<wielkosc; i++)
  86.         {
  87.             for(int j=0; j<wielkosc; j++)
  88.             {
  89.                 if(i==y)
  90.                     atakowanePola[i][j]=true;
  91.                 if(j==x)
  92.                     atakowanePola[i][j]=true;
  93.                 if(abs(y-i)==abs(x-j))
  94.                     atakowanePola[i][j]=true;
  95.             }
  96.         }
  97.     }
  98.  
  99.     void zdejmij()
  100.     {
  101.         x=0;
  102.         y=0;
  103.         aktywny=false;
  104.         czysc();
  105.     }
  106.  
  107.     void pokazAtak()
  108.     {
  109.         cout << "Atakowane pola:\n";
  110.         for(int i=0; i<wielkosc; i++)
  111.         {
  112.             for(int j=0; j<wielkosc; j++)
  113.             {
  114.                 cout << atakowanePola[i][j];
  115.                 if(j!=wielkosc-1) cout << ":";
  116.             }
  117.             cout << endl;
  118.         }
  119.     }
  120.  
  121.     void czysc()
  122.     {
  123.         for(int i=0; i<wielkosc; i++)
  124.         {
  125.             for(int j=0; j<wielkosc; j++)
  126.             {
  127.                 atakowanePola[i][j]=false;
  128.             }
  129.         }
  130.     }
  131.  
  132.     void wPrawo()
  133.     {
  134.         ustaw(wielkosc, x+1, y);
  135.     }
  136.  
  137.  
  138. };
  139.  
  140. class Plansza
  141. {
  142. public:
  143.     int rozmiar;
  144.     Hetman *tab;
  145.     int aktualnyHetman;
  146.     vector<vector<bool> > zagrozonePola;
  147.  
  148. public:
  149.  
  150.     Plansza(int wielkosc)
  151.     {
  152.         rozmiar=wielkosc;
  153.         tab = new Hetman[rozmiar];
  154.  
  155.         zagrozonePola.resize(rozmiar);
  156.         for(int i=0; i<rozmiar; i++)
  157.             zagrozonePola[i].resize(rozmiar);
  158.  
  159.     }
  160.  
  161.     ~Plansza()
  162.     {
  163.         delete []tab;
  164.     }
  165.  
  166.     void aktualizuj(int wyklucz=-1)
  167.     {
  168.         czysc();
  169.  
  170.         for(int h=0; h<rozmiar; h++)
  171.             if(tab[h].aktywny && h!=wyklucz)
  172.                 for(int i=0; i<rozmiar; i++)
  173.                     for(int j=0; j<rozmiar; j++)
  174.                         if(tab[h].atakowanePola[i][j]) zagrozonePola[i][j]=true;
  175.     }
  176.  
  177.     void rozwiaz()
  178.     {
  179.         //bool zrobione=false;
  180.         //aktualnyHetman=0;
  181.         //int aktualnyRzad=0;
  182.         //tab[0].ustaw(rozmiar, 0 ,0);
  183.         //aktualizuj();
  184.         //aktualnyHetman++;
  185.  
  186.         //cout << tab[0].aktywny;
  187.  
  188.  
  189.         for(int i=0; i<rozmiar;)
  190.         {
  191.             //cout << i << endl;
  192.             if(i<0){cout << "Glupota\n"; return;}
  193.  
  194.             if(tab[0].x>=rozmiar)
  195.             {
  196.                 cout << "Nie da sie\n";
  197.                 return;
  198.             }
  199.  
  200.             if(tab[i].x>=rozmiar)
  201.             {
  202.                 tab[i].zdejmij();
  203.                 aktualizuj();
  204.                 tab[i-1].wPrawo();
  205.                 aktualizuj();
  206.                 i--;
  207.                 continue;
  208.             }
  209.  
  210.             if(tab[i].aktywny)
  211.             {
  212.                 aktualizuj(i);
  213.                 if(zagrozonePola[tab[i].y][tab[i].x])
  214.                 {
  215.                     if(znajdzWolne(tab[i].x, i)!=-1)
  216.                     {
  217.                         tab[i].ustaw(rozmiar, znajdzWolne(tab[i].x, i), i);
  218.                         aktualizuj();
  219.                     }
  220.                     else
  221.                     {
  222.                         tab[i].zdejmij();
  223.                         aktualizuj();
  224.                         tab[i-1].wPrawo();
  225.                         aktualizuj();
  226.                         i--;
  227.                         continue;
  228.                     }
  229.                 }
  230.             }
  231.  
  232.             aktualizuj();
  233.  
  234.             if(!tab[i].aktywny)
  235.             {
  236.                 if(znajdzWolne(tab[i].x, i)!=-1)
  237.                 {
  238.                     tab[i].ustaw(rozmiar, znajdzWolne(0, i), i);
  239.                     aktualizuj();
  240.                 }
  241.                 else
  242.                 {
  243.                     tab[i-1].wPrawo();
  244.  
  245.                     aktualizuj();
  246.                     i--;
  247.                     continue;
  248.                 }
  249.             }
  250.  
  251.             i++;
  252.         }
  253.  
  254.         pokazWynik();
  255.     }
  256.  
  257.     void pokazZagrozone()
  258.     {
  259.         cout << "Zagrozone pola:\n";
  260.         for(int i=0; i<rozmiar; i++)
  261.         {
  262.             for(int j=0; j<rozmiar; j++)
  263.             {
  264.                 cout << zagrozonePola[i][j];
  265.                 if(j!=rozmiar-1) cout << ":";
  266.             }
  267.             cout << endl;
  268.         }
  269.     }
  270.  
  271.     void czysc()
  272.     {
  273.         for(int i=0; i<rozmiar; i++)
  274.         {
  275.             for(int j=0; j<rozmiar; j++)
  276.             {
  277.                 zagrozonePola[i][j]=false;
  278.             }
  279.         }
  280.     }
  281.  
  282.     int znajdzWolne(int od, int rzad)
  283.     {
  284.         for(int i=od; i<rozmiar; i++)
  285.         {
  286.             if(!zagrozonePola[rzad][i])
  287.                 return i;
  288.         }
  289.         return -1;
  290.     }
  291.  
  292.     void pokazWynik()
  293.     {
  294.         cout << "Dla szachownicy " << rozmiar << "X" << rozmiar << " rozwiazaniem jest uklad:\n";
  295.         for (int i = 0; i < rozmiar; i++)
  296.         {
  297.             cout << "Hetman " << i + 1 << " soti na polu: " << tab[i].x << "," << tab[i].y << endl;
  298.         }
  299.  
  300.         cout << endl << "Graficznie wyglada to tak:\n";
  301.  
  302.         narysujWynik();
  303.  
  304.         cout << endl;
  305.     }
  306.  
  307.     void narysujWynik()
  308.     {
  309.         for (int i = 0; i < rozmiar; i++)
  310.         {
  311.             for (int j = 0; j < rozmiar; j++)
  312.             {
  313.                 bool jest = false;
  314.  
  315.                 for (int h = 0; h < rozmiar; h++)
  316.                 {
  317.                     if (j == tab[h].x && i == tab[h].y)
  318.                         jest = true;
  319.                 }
  320.  
  321.                 cout << jest;
  322.                 if (j < rozmiar - 1)
  323.                     cout << ":";
  324.             }
  325.             cout << endl;
  326.         }
  327.     }
  328.  
  329.  
  330. };
  331.  
  332. int main()
  333. {
  334.  
  335.  
  336.     //cout << a.atakowanePola[];
  337.  
  338. //    vector<vector<int> > tablica2D;
  339.  
  340.     //tablica2D.resize(3);
  341.     //for(int i=0; i<3; i++)
  342.     //    tablica2D[i].resize(2);
  343.  
  344.     //tablica2D[0][1]=3;
  345.  
  346.     //for(int i=0; i<3; i++)
  347.     //{
  348.     //    for(int j=0; j<2; j++)
  349.     //    {
  350.     //        cout << tablica2D[i][j];
  351.     //    }
  352.     //    cout << endl;
  353.     //}
  354.     //cout << "Koniec testu 1\n\n";
  355.  
  356.     Hetman a(5, 0, 1), b(5, 2, 0);
  357.  
  358.  
  359.     a.pokazAtak();
  360.     b.pokazAtak();
  361.  
  362.     Plansza szachownica(5);
  363.  
  364.     szachownica.pokazZagrozone();
  365.  
  366.     szachownica.tab[0] = a;
  367.     szachownica.tab[1] = b;
  368.     szachownica.aktualizuj(0);
  369.     szachownica.pokazZagrozone();
  370.  
  371.     cout << "Koniec testu 2\n\n";
  372.  
  373.     Plansza szachownica2(5);
  374.     szachownica2.rozwiaz();
  375.     //szachownica2.narysujWynik();
  376.  
  377.     //cout << szachownica2.tab[1].x;
  378.    
  379.  
  380.     //if(!szachownica.zagrozonePola[szachownica.tab[0].y][szachownica.tab[0].x]) cout << "HEJ!";
  381.  
  382.     //cout << szachownica.znajdzWolne(2, 2);
  383.  
  384.     //cout << szachownica.zagrozonePola[0][1];
  385.  
  386. //    bool x=true, y=true, z=false;
  387. //
  388. //    cout << (z||z) << endl;
  389.  
  390.  
  391.     //cout << a.atakowanePola[1][0];
  392.  
  393.     system("pause");
  394.  
  395.  
  396.  
  397.     return 0;
  398. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement