разбиение многомерного массива - PullRequest
0 голосов
/ 07 сентября 2011

Я пытаюсь реализовать следующий алгоритм: предположим, что есть массив a [3] [3], моя цель - выбрать некоторый элемент поворота, например a [1] [1], и создать раздел таким образом, чтобы все элементы меньше a [1] [1] были слева сторона и над элементом поворота, и все большие элементы с правой стороны и под элементом поворота. например рассмотрим следующую матрицу:

6 4 3
8 5 2
1 7 9

один из возможных разделов -

3 4 6
2 5 7
1 8 9

как вы видите, все меньше элементов находятся с левой стороны и над шарниром, называемым 4., а другие с правой стороны и под шарниром как 8. вот мой код

#include <iostream>
using namespace std;
int main(){
  int a[3][3];
  for (int i=0;i<3;i++) {
    for (int j=0;j<3;j++){
      cin>>a[i][j];
    }
  }

  int i=0;
  int j=0;
  int n=2;
  int m=2;
  int pivot=a[1][1];

  while(  m>i && n>j) {
    while(a[m][n]>pivot)  --m;--n;
    while( a[i][j]<pivot) ++i;++j;

    int t=a[i][j];
    a[i][j]=a[m][n];
    a[m][n]=t;
  }

  for (int i=0;i<3;i++){
    for (int j=0;j<3;j++){
      cout<<a[i][j]<<"  ";
    }
    cout<<endl;
  }
  return 0;
}

но когда я ввел матрицу, указанную выше, я получил неправильный результат

6  5  3
8  4  2
1  7  9

пожалуйста, помогите мне

Ответы [ 2 ]

2 голосов
/ 07 сентября 2011

Я не смотрел, если ваш алгоритм правильный, но когда я вижу:

while(a[m][n]>pivot) --m;--n;

Я думаю, вы имели в виду:

while(a[m][n]>pivot) { --m;--n; }

1 голос
/ 07 сентября 2011

Ваша проблема, как указано, не имеет общего решения. В частности, нет никакой гарантии, что все значения, меньшие, чем начальное значение поворота, будут соответствовать слева от начальной точки поворота, или что все значения, превышающие начальное значение, будут соответствовать правому значению начальной точки поворота.

Вам нужно ослабить свои требования, чтобы либо значение, либо значение точки поворота могли изменяться во время выполнения алгоритма.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...