Advertisement
Guest User

Hubert

a guest
Dec 13th, 2017
77
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. const int N = 5;
  5.  
  6.  
  7. struct pole {
  8.     int w, k;
  9. };
  10.  
  11. int koszt(int tab[N][N], pole p1, pole p2) { //wieza p1 zafixowana, sprawdzamy koszt dla dodanej p2
  12.     int suma = 0;
  13.     if (p1.w == p2.w && p1.k == p2.k) return 0;
  14.     if (p1.w == p2.w) {
  15.         for (int i = 0; i < N; i++) {
  16.             suma += tab[i][p2.k];
  17.         } return suma - tab[p2.w][p2.k] + tab[p1.w][p1.k];
  18.     }
  19.     if (p1.k == p2.k) {
  20.         for (int i = 0; i < N; i++) {
  21.             suma += tab[p2.w][i];
  22.         } return suma - tab[p2.w][p2.k] + tab[p1.w][p1.k];
  23.     }
  24.     for (int i = 0; i < N; i++) {
  25.         suma += tab[i][p2.k] + tab[p2.w][i];
  26.  
  27.     } suma -= tab[p1.w][p2.k] + tab[p2.w][p1.k];
  28.     return suma - 2 * tab[p2.w][p2.k];
  29. }
  30.  
  31. bool ruch(int tab[N][N], pole p1, pole p2) {
  32.  
  33.     for (int i = 0; i < N; i++) {//sprawdzam przesuwanie wzdluz wiersza
  34.         if (koszt(tab, p1, { p2.w,i }) > koszt(tab, p1, p2)) {         
  35.             return true;
  36.         }
  37.     }
  38.     for (int i = 0; i < N; i++) {//sprawdzam przesuwanie wzdluz kolumny
  39.         if (koszt(tab, p1, { i,p2.k }) > koszt(tab, p1, p2)) return true;
  40.     }
  41.     return false;
  42. }
  43.  
  44. bool main_ruch(int tab[N][N], pole p1, pole p2) {
  45.     return ruch(tab, p1, p2) || ruch(tab, p2, p1);
  46. }
  47.  
  48. int main() {
  49.     // for (int i = 0; i < N*N; i++) {
  50.     //  cout << tab[i / N][i%N] << " ";
  51.     //  if (i%N == N - 1) cout << endl;
  52.     // }   
  53.     // cout << main_ruch(tab, { 0,0 }, { 0,1 }) << endl;
  54.     // system("pause");
  55.  
  56.     int t[N][N];
  57.     for (int i = 0; i < N; ++i) {
  58.         for (int j = 0; j < N; ++j) {
  59.             t[i][j] = i * 10 + j;
  60.  
  61.             cout << t[i][j] << " ";
  62.         }
  63.         cout << endl;
  64.     }
  65.  
  66.     pole w1, w2;
  67.     w1.w = 3, w1.k = 4;
  68.     w2.w = 4, w2.k = 3;
  69.  
  70.     cout << "Possible? " << main_ruch(t, w1, w2) << endl;
  71.  
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement