Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- struct cord {
- int row, col;
- };
- const int N = 5;
- int makeSums(int t[N][N], int rows[N], int cols[N]) {
- for (int i = 0; i < N; ++i) {
- rows[i] = cols[i] = 0;
- for (int j = 0; j < N; ++j) {
- rows[i] += t[i][j];
- cols[i] += t[j][i];
- }
- }
- }
- int value(int t[N][N], int r[N], int c[N], cord w1, cord w2) {
- int sum = 0;
- sum += r[w1.row] + r[w2.row] + c[w1.col] + c[w2.col];
- if (w1.row == w2.row)
- sum -= r[w1.row];
- if (w1.col == w2.col)
- sum -= c[w1.col];
- return (sum - 2 * t[w1.row][w1.col] - 2 * t[w2.row][w2.col]);
- }
- bool move(int t[N][N], cord w1, cord w2) {
- int rows[N], cols[N];
- makeSums(t, rows, cols);
- cord moving;
- moving.row = w2.row;
- moving.col = w2.col;
- int sum = value(t, rows, cols, w1, w2);
- for (int i = 0; i < N; ++i) { // Move by row
- moving.row = i;
- if (value(t, rows, cols, w1, moving) > sum)
- return true;
- }
- moving.row = w2.row;
- for (int i = 0; i < N; ++i) { // Move by col
- moving.col = i;
- if (value(t, rows, cols, w1, moving) > sum)
- return true;
- }
- }
- bool move_all(int t[N][N], cord w1, cord w2) {
- return move(t, w1, w2) || move(t, w2, w1);
- }
- int main() {
- int t[N][N];
- for (int i = 0; i < N; ++i) {
- for (int j = 0; j < N; ++j) {
- t[i][j] = i * 10 + j;
- cout << t[i][j] << " ";
- }
- cout << endl;
- }
- cord w1, w2;
- w1.row = 3, w1.col = 4;
- w2.row = 4, w2.col = 3;
- cout << "Possible? " << move_all(t, w1, w2) << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement