Алгоритмы заполнения наводнения — Площадь комнаты

Есть задача рассчитать площадь помещения в матрице. первые входы — это координаты положения строки и столбца — нули — это свободное место, 1 — стены. Проблема в том, что функция заливки дает мне исключение переполнения стека.

#include<iostream>
#include<conio.h>
using namespace std;

int a[5][5] = { {0,0,1,0,0},
{0,0,1,0,0},
{0,0,1,1,1},
{1,1,1,0,0},
{0,0,1,0,0},
};

bool vis[5][5] = { {0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
};
int c = 0;

void flood(int row, int col){
if(row < 0 || row > 4 || col < 0 || col > 4)
return;
if(a[row][col] == 0 && !vis[row][col]){
c++;
vis[row][col] = 1;
}
flood(row-1, col);
flood(row+1, col);
flood(row,col-1);
flood(row, col+1);
}

int main(){
int row, column;
cin>>row>>column;

flood(row,column);
cout<< c;

getch();
return 0;
}

2

Решение

Вы не должны повторяться, если вы попали в поле, которое вы уже посетили.

В вашем коде это означает, что удар по !vis[row][col] пункт должен предотвратить дальнейшие рекурсивные вызовы flood, Вы можете достичь этого просто перемещая их внутрь if (или, может быть, немного яснее, переместив все на улицу и изменив условия). Это также предотвратит рекурсию, когда вы врежетесь в стену, но это также то, что ты хочешь.

2

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector