Я надеюсь, у вас хороший день.
Мне нужно решить проблему с горизонтом тремя разными способами; Программирование грубой силы, D & C и Dynami c.
Проблема в грубой силе.
У меня есть координаты всех прямоугольников с четырьмя точками.
int arr[8][3] = {{5, 12, 0}, {7, 6, 1}, {6, 15, 4}, {10, 3, 15}, {4, 7, 12}, {7, 15, 23}, {2, 20, 20}, {5, 4, 24}};
-> ширина 2. -> высота 3. -> начало
int bruteForce (int arr [] [3], int n) {
int coord[n*4][2];
int rect = 0;
for(int i = 0; i < n*4; i = i+4)
{
coord[i][0] = arr[rect][2]; // Sol Alt
coord[i][1] = 0;
coord[i+1][0] = arr[rect][2]; // Sol Üst
coord[i+1][1] = arr[rect][1];
coord[i+2][0] = arr[rect][2] + arr[rect][0]; // Sağ Üst
coord[i+2][1] = arr[rect][1];
coord[i+3][0] = arr[rect][2] + arr[rect][0]; // Sağ Alt
coord[i+3][1] = 0;
rect++;
}
Я обнаружил точки перекрытия между двумя прямоугольниками, и теперь я пытаюсь найти те точки, которые не находятся внутри или над другими прямоугольниками, кроме как сами по себе.
для этого я сделал это
vector <int> outerX;
vector <int> outerY;
for(int i = 0; i < n*4; i++)
{
outerX.push_back(coord[i][0]);
outerY.push_back(coord[i][1]);
}
int control = 0;
for(int i = outerX.size() - 1; i >= 0; i--)
{
for(int j = 0; j < n*4 ; j = j+4)
{
if(control == 1)
break;
if(!(isPointSame(coord[j][0], coord[j][1], coord[j+2][0], coord[j+2][1], outerX[i], outerY[i])))
{
if(isAllInside(coord[j][0], coord[j][1], coord[j+2][0], coord[j+2][1], outerX[i], outerY[i]))
{
outerX.pop_back();
outerY.pop_back();
control = 1;
}
}
}
control = 0;
}
for(unsigned int i = 0; i < outerX.size(); i++)
{
cout << outerX[i] << " " << outerY[i] << endl;
}
ordin [] [], externalX и externalY координаты true при запуске, я проверил их.
функций, которые я использовал
bool isAllInside(int x1, int y1, int x2, int y2, int x, int y)
{
if (x >= x1 and x <= x2 and y >= y1 and y <= y2)
return true;
return false;
}
bool isPointSame(int x1, int y1, int x2, int y2, int x, int y)
{
if((x == x1 && y == y1) || (x == x1 && y == y2) || (x == x2 && y == y2) || (x == x2 && y == y1))
return true;
return false;
}
, но, наконец, когда я печатаю externalX и outerY, я не могу получить желаемых результатов.
Заранее спасибо