Advertisement
wojtas626

[C++] Przypadek skoczka (szachowego)

Mar 8th, 2015
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.94 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void wypelnijPoziomIPion(int poziom[], int pion[])
  6. {
  7.     poziom[0] = 2;
  8.     poziom[1] = 1;
  9.     poziom[2] = -1;
  10.     poziom[3] = -2;
  11.     poziom[4] = -2;
  12.     poziom[5] = -1;
  13.     poziom[6] = 1;
  14.     poziom[7] = 2;
  15.  
  16.     pion[0] = -1;
  17.     pion[1] = -2;
  18.     pion[2] = -2;
  19.     pion[3] = -1;
  20.     pion[4] = 1;
  21.     pion[5] = 2;
  22.     pion[6] = 2;
  23.     pion[7] = 1;
  24. }
  25.  
  26. void zerujPlansze(int plansza[][8])
  27. {
  28.     for (int i = 0; i < 8; i++)
  29.     {
  30.         for (int j = 0; j < 8; j++)
  31.         {
  32.             plansza[i][j] = 0;
  33.         }
  34.     }
  35. }
  36.  
  37. void wypelnijDostepnosc(int dost[][8], int plansza[0][8])
  38. {
  39.     int licznik;
  40.     for (int i = 0; i < 8; i++)
  41.     {
  42.         for (int j = 0; j < 8; j++)
  43.         {
  44.             if (plansza[i][j]) dost[i][j] = 9;
  45.             else
  46.             {
  47.                 licznik = 0;
  48.  
  49.                 if ( (i - 2 >= 0) && (j - 1 >= 0) && (plansza[i - 2][j - 1] == 0) ) licznik++;
  50.                 if ( (i - 2 >= 0) && (j + 1 <= 7) && (plansza[i - 2][j + 1] == 0) ) licznik++;
  51.                 if ( (i - 1 >= 0) && (j - 2 >= 0) && (plansza[i - 1][j - 2] == 0) ) licznik++;
  52.                 if ( (i - 1 >= 0) && (j + 2 <= 7) && (plansza[i - 1][j + 2] == 0) ) licznik++;
  53.  
  54.                 if ( (i + 2 <= 7) && (j - 1 >= 0) && (plansza[i + 2][j - 1] == 0) ) licznik++;
  55.                 if ( (i + 2 <= 7) && (j + 1 <= 7) && (plansza[i + 2][j + 1] == 0) ) licznik++;
  56.                 if ( (i + 1 <= 7) && (j - 2 >= 0) && (plansza[i + 1][j - 2] == 0) ) licznik++;
  57.                 if ( (i + 1 <= 7) && (j + 2 <= 7) && (plansza[i + 1][j + 2] == 0) ) licznik++;
  58.  
  59.                 dost[i][j] = licznik;
  60.             }
  61.         }
  62.     }
  63.     /*
  64.                 for (int i = 0; i < 8; i++)
  65.                 {
  66.                     for (int j = 0; j < 8; j++)
  67.                     {
  68.                         cout << dost[i][j] << " ";
  69.                     }
  70.                     cout << endl;
  71.                 }
  72.                 cout << endl;
  73.     */
  74. }
  75.  
  76. int sprawdzDrugiRuch(int poziom[8], int pion[8], int plansza[8][8], int dostepnosc[8][8], int biezacyWiersz, int biezacaKolumna)
  77. {
  78.     int najnizszaDostepnosc = 10;
  79.     plansza[biezacyWiersz][biezacaKolumna] = 1;
  80.     wypelnijDostepnosc(dostepnosc, plansza);
  81.  
  82.     for (int i = 0; i < 8; i++)
  83.     {
  84.         if ( (poziom[i] + biezacyWiersz >= 0) && (poziom[i] + biezacyWiersz < 8) )
  85.         {
  86.             if ( (pion[i] + biezacaKolumna >= 0) && (pion[i] + biezacaKolumna < 8) && !(plansza[poziom[i] + biezacyWiersz][pion[i] + biezacaKolumna]) )
  87.             {
  88.                 if (najnizszaDostepnosc > dostepnosc[poziom[i] + biezacyWiersz][pion[i] + biezacaKolumna])
  89.                 {
  90.                     najnizszaDostepnosc = dostepnosc[poziom[i] + biezacyWiersz][pion[i] + biezacaKolumna];
  91.                 }
  92.             }
  93.         }
  94.     }
  95.     plansza[biezacyWiersz][biezacaKolumna] = 0;
  96.     return najnizszaDostepnosc;
  97. }
  98.  
  99. int zrobPrzejscie(int startowyWiersz, int startowaKolumna)
  100. {
  101.     int plansza[8][8], dostepnosc[8][8];
  102.     int poziom[8], pion[8];
  103.     int biezacyWiersz, biezacaKolumna, licznik;
  104.     int najnizszaDostepnosc, najnizszaDostepnoscX, najnizszaDostepnoscY;
  105.  
  106.     biezacyWiersz = startowyWiersz;
  107.     biezacaKolumna = startowaKolumna;
  108.  
  109.     wypelnijPoziomIPion(poziom, pion);
  110.     zerujPlansze(plansza);
  111.     plansza[biezacyWiersz][biezacaKolumna] = 1;
  112.     wypelnijDostepnosc(dostepnosc, plansza);
  113.  
  114.     licznik = 1;
  115.  
  116.     while (true)
  117.     {
  118.         najnizszaDostepnosc = 9;
  119.         int dostepnosci[8];
  120.         najnizszaDostepnoscX = 0;
  121.         najnizszaDostepnoscY = 0;
  122.  
  123.  
  124.         for (int i = 0; i < 8; i++)
  125.         {
  126.             dostepnosci[i] = 10;
  127.             if ( (poziom[i] + biezacyWiersz >= 0) && (poziom[i] + biezacyWiersz < 8) )
  128.             {
  129.                 if ( (pion[i] + biezacaKolumna >= 0) && (pion[i] + biezacaKolumna < 8) && !(plansza[poziom[i] + biezacyWiersz][pion[i] + biezacaKolumna]) )
  130.                 {
  131.                     dostepnosci[i] = dostepnosc[poziom[i] + biezacyWiersz][pion[i] + biezacaKolumna];
  132.                 }
  133.             }
  134.         }
  135.  
  136.  
  137.         najnizszaDostepnosc = dostepnosci[0];
  138.         for (int i = 1; i < 8; i++)
  139.         {
  140.             if (najnizszaDostepnosc > dostepnosci[i])
  141.             {
  142.                 najnizszaDostepnosc = dostepnosci[i];
  143.                 najnizszaDostepnoscX = poziom[i];
  144.                 najnizszaDostepnoscY = pion[i];
  145.             }
  146.         }
  147.         int drugiRuch[8];
  148.         int drugiRuchMin;
  149.  
  150.  
  151.         for (int i = 0; i < 8; i++)
  152.         {
  153.             drugiRuch[i] = 10;
  154.             if (najnizszaDostepnosc == dostepnosci[i])
  155.             {
  156.                 drugiRuch[i] = sprawdzDrugiRuch(poziom, pion, plansza, dostepnosc, biezacyWiersz+poziom[i], biezacaKolumna+pion[i]);
  157.             }
  158.         }
  159.  
  160.         drugiRuchMin = drugiRuch[0];
  161.         for (int i = 1; i < 8; i++)
  162.         {
  163.             if (drugiRuchMin > drugiRuch[i] )
  164.             {
  165.                 drugiRuchMin = drugiRuch[i];
  166.             }
  167.         }
  168.  
  169.         for (int i = 0; i < 8; i++)
  170.         {
  171.             if (drugiRuchMin == drugiRuch[i] )
  172.             {
  173.                 najnizszaDostepnoscX = poziom[i];
  174.                 najnizszaDostepnoscY = pion[i];
  175.             }
  176.         }
  177.  
  178.         if (najnizszaDostepnosc < 9)
  179.         {
  180.             biezacyWiersz += najnizszaDostepnoscX;
  181.             biezacaKolumna += najnizszaDostepnoscY;
  182.             licznik++;
  183.             wypelnijDostepnosc(dostepnosc, plansza);
  184.             plansza[biezacyWiersz][biezacaKolumna] = 1;
  185.  
  186.         }
  187.         else break;
  188.     }
  189.     return licznik;
  190. }
  191.  
  192. int main()
  193. {
  194.     cout << "Ponizej szachownica, ktorej kazdemu polu jest przypisana liczba skokow skoczka, gdy startuje z tego pola:";
  195.     cout << endl << endl;
  196.     for (int i = 0; i < 8; i++)
  197.     {
  198.         for (int j = 0; j < 8; j++)
  199.         {
  200.             cout << zrobPrzejscie(i, j) << " ";
  201.         }
  202.         cout << endl;
  203.     }
  204.  
  205.     return 0;
  206. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement