kburnik

C++ - Zadatak Othello - rješenje

Mar 14th, 2013
76
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  Zadatak: Othello, Infokup 2012, 7.r. državno
  3.  
  4.  Ponuđeno rješenje: Kristijan Burnik
  5.  
  6.  Posebna zahvala na pomoći: Dominik Fistrić
  7.  
  8. */
  9. #include <iostream>
  10. #include <cstdlib>
  11. #include <vector>
  12.  
  13. using namespace std;
  14.  
  15.  
  16. const int R = 8, S = 8;
  17. const int X = 1;
  18. const int O = 2;
  19.  
  20. // kod globalnih matrica, resetira se sve u nulu
  21. int ploca[R][S];
  22.  
  23. int n;
  24. int okrenutih = 0;
  25.  
  26. // sva zatvaranja (zrake oko trenutnog žetona)
  27. /*
  28.  
  29. D - dalji žeton {dr,ds}
  30. B - bliži žeton {br,bs}
  31. T - treutni žeton (nije naveden jer je uvijek {0,0} )
  32.  
  33. D D D
  34.  BBB
  35. DBTBD
  36.  BBB
  37. D D D
  38. */
  39.  
  40. int zatvaranja[8][2][2] = {
  41.     {{-2,-2},{-1,-1}},
  42.     {{-2,0},{-1,0}},
  43.     {{-2,2},{-1,1}},    
  44.     {{0,2},{0,1}},    
  45.     {{2,2},{1,1}},
  46.     {{2,0},{1,0}},        
  47.     {{2,-2},{1,-1}},
  48.     {{0,-2},{0,-1}},    
  49. };
  50.  
  51. void okreni(int r, int s, int igrac) {
  52.     int br,bs,dr,ds;
  53.    
  54.     for (int k = 0; k < 8; k++) {
  55.         // pozicija blizeg
  56.         br=zatvaranja[k][1][0];
  57.         bs=zatvaranja[k][1][1];
  58.  
  59.         // pozicija daljeg
  60.         dr=zatvaranja[k][0][0];
  61.         ds=zatvaranja[k][0][1];
  62.  
  63.         // izvan matrice
  64.         if ( (r+br) >= R || (r+br) < 0 || (s+bs) >= S || (s+bs) < 0 )  
  65.             continue; // preskoci ovaj korak petlje
  66.  
  67.            
  68.         int trenutni = ploca[r][s];
  69.         int blizi = ploca[r+br][s+bs];
  70.         int dalji = ploca[r+dr][s+ds];                
  71.        
  72.         // prazno polje, preskoci
  73.         if (blizi == 0 || dalji == 0)
  74.             continue;
  75.  
  76.        
  77.         if (dalji != blizi && blizi != trenutni ) {
  78.             // okreni
  79.             ploca[r+br][s+bs] = igrac;  
  80.             // pribroji
  81.             okrenutih++;
  82.         }
  83.     }
  84. }
  85.  
  86. int main() {
  87.     cin >> n;
  88.    
  89.     int r,s;
  90.     int igrac = X;
  91.    
  92.     // postavi pocetne zetone
  93.     ploca[3][3] = ploca[4][4] = X;
  94.     ploca[3][4] = ploca[4][3] = O;    
  95.    
  96.     for (int i = 0 ; i < n ; i++) {
  97.         cin >> r >> s;
  98.         r--; s--;
  99.  
  100.         // postavi zeton
  101.         ploca[r][s] = igrac;
  102.        
  103.         // okreni ako treba i broji okrete
  104.         okreni(r,s,igrac);
  105.        
  106.         // promjeni igraca
  107.         igrac = (X+O) - igrac;
  108.     }
  109.  
  110.     // ispisi kolko je bilo okrenutih
  111.     cout << okrenutih << endl;
  112.    
  113.     system("pause");
  114.  
  115.     return 0;
  116. }
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×