Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.07 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <algorithm>
  4. #include <fstream>
  5.  
  6. using namespace std;
  7.  
  8. struct Kamen{
  9.     int cislo;
  10.     int poziceX;
  11.     int poziceY;
  12.     int pozadovaneX;
  13.     int pozadovaneY;
  14.     int vzdalenost;
  15.     bool tah;
  16. };
  17.  
  18. const int m_spravnaMatice [3][3] = { {1,2,3}, {8,0,4}, {7,6,5} };
  19. int matice1[3][3] = { {1,2,3}, {0,8,4}, {7,6,5} }; // pomocna matice pro nacteni hodnot
  20. Kamen m_vstupniMatice[3][3];
  21.  
  22. void nastaveniFalse(Kamen vstupniMatice[3][3]){
  23.     for(int i = 0; i < 3; i++)
  24.         for(int j = 0; j < 3; j++)
  25.             vstupniMatice[i][j].tah = false;
  26. }
  27.  
  28. void inicializace(Kamen vstupniMatice[3][3]){
  29.  
  30.     // nacteni hodnot kamenu v sachovnici (nastaveni parametru cislo)
  31.     for(int i = 0; i < 3; i++)
  32.         for(int j = 0; j < 3; j++)
  33.             vstupniMatice[i][j].cislo = matice1[i][j];
  34.  
  35.     // aktualni pozice kamenu v sachovnici (nastaveni parametru poziceX a poziceY)
  36.     vstupniMatice[0][0].poziceX = 0;
  37.     vstupniMatice[0][0].poziceY = 0;
  38.     vstupniMatice[0][1].poziceX = 0;
  39.     vstupniMatice[0][1].poziceY = 1;
  40.     vstupniMatice[0][2].poziceX = 0;
  41.     vstupniMatice[0][2].poziceY = 2;
  42.     vstupniMatice[1][0].poziceX = 1;
  43.     vstupniMatice[1][0].poziceY = 0;
  44.     vstupniMatice[1][1].poziceX = 1;
  45.     vstupniMatice[1][1].poziceY = 1;
  46.     vstupniMatice[1][2].poziceX = 1;
  47.     vstupniMatice[1][2].poziceY = 2;
  48.     vstupniMatice[2][0].poziceX = 2;
  49.     vstupniMatice[2][0].poziceY = 0;
  50.     vstupniMatice[2][1].poziceX = 2;
  51.     vstupniMatice[2][1].poziceY = 1;
  52.     vstupniMatice[2][2].poziceX = 2;
  53.     vstupniMatice[2][2].poziceY = 2;
  54.  
  55.     // pozadovana pozice kamenu v sachovnici (nastaveni parametru pozadovaneX a pozadovaneY)
  56.     vstupniMatice[0][0].pozadovaneX = 0;
  57.     vstupniMatice[0][0].pozadovaneY = 0;
  58.     vstupniMatice[0][1].pozadovaneX = 0;
  59.     vstupniMatice[0][1].pozadovaneY = 1;
  60.     vstupniMatice[0][2].pozadovaneX = 0;
  61.     vstupniMatice[0][2].pozadovaneY = 2;
  62.     vstupniMatice[1][0].pozadovaneX = 1; // [1][0] -> [1][1]
  63.     vstupniMatice[1][0].pozadovaneY = 1; // [1][0] -> [1][1]
  64.     vstupniMatice[1][1].pozadovaneX = 1; // [1][1] -> [1][0]
  65.     vstupniMatice[1][1].pozadovaneY = 0; // [1][1] -> [1][0]
  66.     vstupniMatice[1][2].pozadovaneX = 1;
  67.     vstupniMatice[1][2].pozadovaneY = 2;
  68.     vstupniMatice[2][0].pozadovaneX = 2;
  69.     vstupniMatice[2][0].pozadovaneY = 0;
  70.     vstupniMatice[2][1].pozadovaneX = 2;
  71.     vstupniMatice[2][1].pozadovaneY = 2;
  72.     vstupniMatice[2][2].pozadovaneX = 2;
  73.     vstupniMatice[2][2].pozadovaneY = 1;
  74.  
  75.     // nastaveni moznosti tahnuti kamenem po sachovnici na false (nastaveni parametru tah)
  76.     nastaveniFalse(m_vstupniMatice);
  77. }
  78.  
  79. void lzePresunout(Kamen vstupniMatice[3][3]){
  80.  
  81.     // nasledne nalezeni kamenu,se kterymi lze hybat
  82.     for(int i = 0; i < 3; i++)
  83.         for(int j = 0; j < 3; j++)
  84.             if(((i-1) >= 0) || ((j-1) >= 0) || ((i+1) <= 2) || ((j+1) <= 2))
  85.                 if( ((vstupniMatice[i][j-1].cislo == 0) && ((j-1) >= 0)) || ((vstupniMatice[i-1][j].cislo == 0) && ((i-1) >= 0)) ||
  86.                     ((vstupniMatice[i][j+1].cislo == 0) && ((j+1) <= 2)) || ((vstupniMatice[i+1][j].cislo == 0) && ((i+1) <= 2)) )
  87.                         vstupniMatice[i][j].tah = true;
  88. }
  89.  
  90. int porovnaniMatice(Kamen vstupniMatice[3][3]){
  91.     int i;
  92.     int j;
  93.     int spravne = 0;
  94.     for (i = 0; i < 3; i++)
  95.         for (j = 0; j < 3; j++)
  96.             if(vstupniMatice[i][j].cislo == m_spravnaMatice[i][j])
  97.                 spravne ++;
  98.     return spravne;
  99. }
  100.  
  101. void presunKostku(Kamen vstupniMatice[3][3]){
  102.     int pom1;
  103.     int pom2;
  104.     Kamen pomMatice[3][3] = Kamen vstupniMatice[3][3];
  105.     int pocetSpravnych;
  106.     int novyPocetSpravnych;
  107.     int pocetKroku;
  108.     pocetSpravnych = 0;
  109.     pocetKroku = 0;
  110.     for(int i = 0; i < 3; i++)
  111.         for(int j = 0; j < 3; j++)
  112.             if(vstupniMatice[i][j].cislo == m_spravnaMatice[i][j])
  113.                 pocetSpravnych ++;
  114.  
  115.     while(novyPocetSpravnych != 9 || pocetKroku < 100){
  116.         for(int i = 0; i < 3; i++)
  117.         for(int j = 0; j < 3; j++)
  118.             if(vstupniMatice[i][j].cislo == 0)
  119.             {
  120.                     pom1 = vstupniMatice[i][j].poziceX;
  121.                     pom2 = vstupniMatice[i][j].poziceY;
  122.                     vstupniMatice[i][j].poziceX = vstupniMatice[i][j-1].poziceX;
  123.                     vstupniMatice[i][j].poziceY = vstupniMatice[i][j-1].poziceY;
  124.                     vstupniMatice[i][j-1].poziceX = pom1;
  125.                     vstupniMatice[i][j-1].poziceY = pom2;
  126.                     pocetKroku ++;
  127.                     novyPocetSpravnych = porovnaniMatice(m_vstupniMatice);
  128.                     nastaveniFalse(m_vstupniMatice);
  129.                     lzePresunout(m_vstupniMatice);
  130.             }
  131.                         if(novyPocetSpravnych < pocetSpravnych)
  132.                         {
  133.                             pom1 = vstupniMatice[i][j].poziceX;
  134.                             pom2 = vstupniMatice[i][j].poziceY;
  135.                             vstupniMatice[i][j].poziceX = vstupniMatice[i][j-1].poziceX;
  136.                             vstupniMatice[i][j].poziceY = vstupniMatice[i][j-1].poziceY;
  137.                             vstupniMatice[i][j-1].poziceX = pom1;
  138.                             vstupniMatice[i][j-1].poziceY = pom2;
  139.                             pocetKroku --;
  140.                             nastaveniFalse(m_vstupniMatice);
  141.                             lzePresunout(m_vstupniMatice);
  142.                         }
  143.             }
  144. }
  145.  
  146. int main(int argc, char *argv[]){
  147.  
  148.     inicializace(m_vstupniMatice);
  149.     lzePresunout(m_vstupniMatice);
  150.     //presunKostku(m_vstupniMatice);
  151.  
  152.     /*
  153.     int i = 0;
  154.     for (int j = 0; j < 3; j++)
  155.         cout << m_vstupniMatice[i][j].tah << " " << m_vstupniMatice[i][j].cislo << " ";
  156.         cout << endl;
  157.     i = 1;
  158.     for (int j = 0; j < 3; j++)
  159.         cout << m_vstupniMatice[i][j].tah << " " << m_vstupniMatice[i][j].cislo << " ";
  160.         cout << endl;
  161.     i = 2;
  162.     for (int j = 0; j < 3; j++)
  163.         cout << m_vstupniMatice[i][j].tah << " " << m_vstupniMatice[i][j].cislo << " ";
  164.         cout << endl;
  165.     */
  166.  
  167.     return 0;
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement