Графический редактор Проблемы программирования

Я просто не могу найти ошибку с этой программой графического редактора, из книги Programming-Challenges. Вот ссылка на проблема.

Все операции работают и тестовый вывод работает нормально.

Вот мой код:

#include <iostream>
#include <string>
#include <stack>
#include <algorithm>
#include <vector>

using namespace std;

int m;
int n;
string s;

vector< vector<char> > picture;

void reset() {
for (int i = 0; i < picture.size(); ++i) {
for (int j = 0; j < picture[i].size(); ++j) {
picture[i][j] = 'O';
}
}
}

struct point {
int x;
int y;
};

bool validate_x(int x) {
return x >= 1 && x <= m;
}

bool validate_y(int y) {
return y >= 1 && y <= n;
}

int main() {
while (true) {
cin >> s;
if (s == "I") {
cin >> m >> n;
picture.resize(m);

for (int i = 0; i < picture.size(); ++i) {
picture[i].resize(n);
}

reset();
} else if (s == "C") {
picture.resize(m);

for (int i = 0; i < picture.size(); ++i) {
picture[i].resize(n);
}

reset();
} else if (s == "L") {
int x, y;
cin >> x >> y;

if (!validate_x(x) || !validate_y(y)) {
continue;
}

char color;
cin >> color;
picture[x-1][y-1] = color;
} else if (s == "V") {
int x, y1, y2;
char color;
cin >> x >> y1 >> y2 >> color;

if (!validate_x(x) || !validate_y(y1) || !validate_y(y2)) {
continue;
}

for (int i = min(y1, y2); i < max(y1, y2) + 1; ++i) {
picture[x-1][i-1] = color;
}
} else if (s == "H") {
int x1, x2, y;
char color;
cin >> x1 >> x2 >> y >> color;

if (!validate_y(y) || !validate_x(x1) || !validate_x(x2)) {
continue;
}

for (int i = min(x1, x2); i < max(x1, x2) + 1; ++i) {
picture[i-1][y-1] = color;
}
} else if (s == "K") {
int x1, y1, x2, y2;
char color;
cin >> x1 >> y1 >> x2 >> y2 >> color;

if (!validate_x(x1) || !validate_x(x2) || !validate_y(y1) || !validate_y(y2)) {
continue;
}

for (int i = min(x1, x2); i < max(x1, x2) + 1; ++i) {
for (int j = min(y1, y2); j < max(y1, y2) + 1; ++j) {
if (i == x1 || i == x2 || j == y1 || j == y2) {
picture[i-1][j-1] = color;
}
}
}
} else if (s == "F") {
int x, y;
char color;
cin >> x >> y >> color;

if (!validate_x(x) || !validate_y(y)) {
continue;
}

char old_color = picture[x-1][y-1];

if (old_color != color) {
stack<point> stack;
point p;
p.x = x - 1;
p.y = y - 1;

stack.push(p);

while (!stack.empty()) {
point curr = stack.top();
stack.pop();

if (picture[curr.x][curr.y] == old_color) {
picture[curr.x][curr.y] = color;
if (curr.x > 0) {
point left;
left.x = curr.x - 1;
left.y = curr.y;

stack.push(left);
}

if (curr.x < m - 1) {
point right;
right.x = curr.x + 1;
right.y = curr.y;

stack.push(right);
}

if (curr.y > 0) {
point over;
over.x = curr.x;
over.y = curr.y - 1;

stack.push(over);
}

if (curr.y < n - 1) {
point under;
under.x = curr.x;
under.y = curr.y + 1;

stack.push(under);
}
}
}
}
} else if (s == "S") {
string name;
getline(cin, name);
cout << name.erase(0, 1) << endl;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
cout << picture[j][i];
}

cout << endl;
}
} else if (s == "X") {
return 0;
}
}
}

Тестовые случаи работают:

I 5 6
2 3 A
one.bmp
2 3 J
3 3 J
2 3 4 W
3 4 2 Z
two.bmp

I 250 250
F 3 3 C
S superman
C
F 3 3 C
S superman
X

0

Решение

Ваша операция K неверна.

I 5 5
K 1 1 4 4 R
S output.txt
output.txt
RRRRO
ROORO
ROORO
RRRRO
OOOOO
X

Прямоугольник должен быть заполнен. Пример:

RRRRO
RRRRO
RRRRO
RRRRO
OOOOO
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]