Advertisement
Guest User

Antek

a guest
Dec 13th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct cord {
  5.     int row, col;
  6. };
  7.  
  8. const int N = 5;
  9.  
  10. int makeSums(int t[N][N], int rows[N], int cols[N]) {
  11.     for (int i = 0; i < N; ++i) {
  12.         rows[i] = cols[i] = 0;
  13.         for (int j = 0; j < N; ++j) {
  14.             rows[i] += t[i][j];
  15.             cols[i] += t[j][i];
  16.         }
  17.     }
  18. }
  19.  
  20. int value(int t[N][N], int r[N], int c[N], cord w1, cord w2) {
  21.     int sum = 0;
  22.     sum += r[w1.row] + r[w2.row] + c[w1.col] + c[w2.col];
  23.  
  24.     if (w1.row == w2.row)
  25.         sum -= r[w1.row];
  26.     if (w1.col == w2.col)
  27.         sum -= c[w1.col];
  28.    
  29.     return (sum - 2 * t[w1.row][w1.col] - 2 * t[w2.row][w2.col]);
  30. }
  31.  
  32. bool move(int t[N][N], cord w1, cord w2) {
  33.     int rows[N], cols[N];
  34.     makeSums(t, rows, cols);
  35.  
  36.     cord moving;
  37.     moving.row = w2.row;
  38.     moving.col = w2.col;
  39.  
  40.     int sum = value(t, rows, cols, w1, w2);
  41.  
  42.     for (int i = 0; i < N; ++i) {   // Move by row
  43.         moving.row = i;
  44.         if (value(t, rows, cols, w1, moving) > sum)
  45.             return true;
  46.     }  
  47.  
  48.     moving.row = w2.row;
  49.     for (int i = 0; i < N; ++i) {   // Move by col
  50.         moving.col = i;
  51.         if (value(t, rows, cols, w1, moving) > sum)
  52.             return true;
  53.     }
  54. }
  55.  
  56. bool move_all(int t[N][N], cord w1, cord w2) {
  57.     return move(t, w1, w2) || move(t, w2, w1);
  58. }
  59.  
  60. int main() {
  61.     int t[N][N];
  62.     for (int i = 0; i < N; ++i) {
  63.         for (int j = 0; j < N; ++j) {
  64.             t[i][j] = i * 10 + j;
  65.  
  66.             cout << t[i][j] << " ";
  67.         }
  68.         cout << endl;
  69.     }
  70.  
  71.     cord w1, w2;
  72.     w1.row = 3, w1.col = 4;
  73.     w2.row = 4, w2.col = 3;
  74.  
  75.     cout << "Possible? " << move_all(t, w1, w2) << endl;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement