Это явно делается в 2 прохода по карте, на первом нужно разметить карту и составить список зон на объединение, а на втором объединить нужные зоны, но вот конкретный алгоритм не получается составить(точнее получается, но там уж очень много вложенных циклов выходит).
Размечать карту не нужно, она и так уже размечена.
Нужно выделить зоны, и записать отдельно. Форма записи зоны должна упрощать последующую обработку.
Сложности программы бояться не следует - она зависит от алгоритма. А вот алгоритм должен быть прозрачным.
Основная процедура - просмотр окружения ячейки. Это простая программа, просматривающая примыкающие горизонтальные и вертикальные ячейки, и выдающая адреса ячеек того же цвета. Адреса найденных ячеек запоминаются в области, отведённой для зоны.
Перебор ячеек карты производится последовательно.
Отлаживать программу удобно на образе буквы
Ш, поворачивая её
.
В данном алгоритме заведомо много дублированных действий, но они устранятся на стадии оптимизации.
P.S. Привлечение понятий теории графов излишне, они не облегчают программирование, без них даже проще.