Мой код выглядит следующим образом. Это дает ошибку сегментации. Я отлаживал это, но застрял! Я не могу найти проблему. Кто-нибудь может мне помочь?
#include <iostream>
#include <fstream>
using namespace std;
char art[200][200];
char art2[200][200];
int n;
void solve(char a, int x, int y);
int main() {
// ifstream fin("cowart.in");
// ofstream fout("cowart.out");
cin >> n;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
cin >> art[i][j];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
art2[i][j] = art[i][j];
int rh = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (art[i][j] == 'R' || art[i][j] == 'G' || art[i][j] == 'B') {
rh++;
solve(art[i][j], i, j);
}
}
}
int rc = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
art[i][j] = art2[i][j];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (art[i][j] == 'G')
art[i][j] = 'R';
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (art[i][j] == 'R' || art[i][j] == 'B') {
rc++;
solve(art[i][j], i, j);
}
}
}
cout << rh << " " << rc << endl;
// system("PAUSE");
// fin.close();
// fout.close();
return 0;
}
void solve(char a, int x, int y) {
if (x < 0 || y < 0 || x >= n || y >= n)
return;
if (art[x][y] != a)
return;
art[x][y] == '.';
if (x < n - 1)
solve(a, x + 1, y);
if (x > 0)
solve(a, x - 1, y);
if (y < n - 1)
solve(a, x, y + 1);
if (y > 0)
solve(a, x, y - 1);
return;
}
Этот код является решением для: USACO Проблема 414
Тестовый пример, который я показываю: Ошибка сегментации:
5
RRRBB
GGBBB
BBBRR
BBRRR
RRRRR
Выход должен быть: 4 3
в solve()
функция, обратите внимание на эту строку?
art[x][y] == '.';
Код выше проверяет, если art[x][y]
равно '.'
, а затем выбрасывает результат. Это законный C ++, но ничего полезного. Умный компилятор может дать вам предупреждение.
Очевидно, это должно быть задание:
art[x][y] = '.';
Функция solve () идет в бесконечной рекурсии, вызывая переполнение стека.
Реализовать решение, используя нерекурсивный, а итеративный метод.
Реализация задачи 4-окрестности итеративным способом с циклами и итерациями