Я думал - ничего толком не придумал. Либо выходит кривой и медленный обход в ширину, либо рекурсия и обход в глубину. Фактически это поиск компонент связности графа, и та же вика предлагает обычный поиск в ширину и глубину.
Касаемо самой проверки, можно как и сказано в "решении" - добавить лишние столбцы и ячейки с нулями, тогда ифы можно вообще выпилить. Получится просто 4 вызова делета. Можно в цикл свернуть по 2:
Код:
for (int i = -1; i < 2; i += 2)
{
deleteIsland(map,x+i,y);
deleteIsland(map,x,y+i)
}
но как-то это тупо.