Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- const int N = 5;
- struct pole {
- int w, k;
- };
- int koszt(int tab[N][N], pole p1, pole p2) { //wieza p1 zafixowana, sprawdzamy koszt dla dodanej p2
- int suma = 0;
- if (p1.w == p2.w && p1.k == p2.k) return 0;
- if (p1.w == p2.w) {
- for (int i = 0; i < N; i++) {
- suma += tab[i][p2.k];
- } return suma - tab[p2.w][p2.k] + tab[p1.w][p1.k];
- }
- if (p1.k == p2.k) {
- for (int i = 0; i < N; i++) {
- suma += tab[p2.w][i];
- } return suma - tab[p2.w][p2.k] + tab[p1.w][p1.k];
- }
- for (int i = 0; i < N; i++) {
- suma += tab[i][p2.k] + tab[p2.w][i];
- } suma -= tab[p1.w][p2.k] + tab[p2.w][p1.k];
- return suma - 2 * tab[p2.w][p2.k];
- }
- bool ruch(int tab[N][N], pole p1, pole p2) {
- for (int i = 0; i < N; i++) {//sprawdzam przesuwanie wzdluz wiersza
- if (koszt(tab, p1, { p2.w,i }) > koszt(tab, p1, p2)) {
- return true;
- }
- }
- for (int i = 0; i < N; i++) {//sprawdzam przesuwanie wzdluz kolumny
- if (koszt(tab, p1, { i,p2.k }) > koszt(tab, p1, p2)) return true;
- }
- return false;
- }
- bool main_ruch(int tab[N][N], pole p1, pole p2) {
- return ruch(tab, p1, p2) || ruch(tab, p2, p1);
- }
- int main() {
- // for (int i = 0; i < N*N; i++) {
- // cout << tab[i / N][i%N] << " ";
- // if (i%N == N - 1) cout << endl;
- // }
- // cout << main_ruch(tab, { 0,0 }, { 0,1 }) << endl;
- // system("pause");
- 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;
- }
- pole w1, w2;
- w1.w = 3, w1.k = 4;
- w2.w = 4, w2.k = 3;
- cout << "Possible? " << main_ruch(t, w1, w2) << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement