Показать сообщение отдельно
  #6  
Старый 30.07.2015, 00:09
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

То же самое, только на си, чуть правильней (диагонали не должны учитываться по заданию) и с немного меньшим числом проверок во время выполнения, хотя выглядит корявее:
Код:
void deleteIsland(char **map, int x, y)
{
    if (map[y][x] == 0)
        return;
    map[y][x] = 0;
    if (y > 0)
        deleteIsland(map, x, y-1);
    if (y < n-1)
        deleteIsland(map, x, y+1);
    if (x > 0)
        deleteIsland(map, x-1, y);
    if (x < n-1)
        deleteIsland(map, x+1, y);
}

int islandsCount(char **map, int N)
{
    int result = 0;
    for (int y = 0; y < N; ++y)
        for (int x = 0; x < N; ++x)
            if (map[y][x] != 0)
            {
                ++result;
                deleteIsland(map, x, y);
            }
    return result;
}
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием