Трудно сказать что-то конкретное, не видя, как именно реализована изнутри структура, описывающая поле.
Предположу, что у вас есть возможность для любой ячейки узнать все шесть её соседей. Если такой метод существует, дальше всё легко.
Примечание: Я буду в ответе использовать термин "множество" в терминологии питона. Если у вас другой язык, воспользуйтесь аналогичной структурой из своего языка. Или используйте простой список, но перед добавлением в него элемента проверяйте, что такого элемента там нет. Иначе цикл никогда не завершится, а список будет разбухать, пока не съест всю память.
Начинаете с одной любой ячейки.
Создайте два пустых множества - назовём их 'currents' и 'visited'.
В currents поместите ту ячейку, с который вы начинаете.
Далее выполняете цикл, пока в currents есть хотя бы одна ячейка:
1. Удалите из currents первую попавшуюся ячейку (далее её я называю "текущей ячейкой").
2. Для этой текущей ячейки найдите всех её соседей.
3. Для каждого соседа:
3.1. Если он того же цвета, что и текущая, и не находится в множестве visited - добавьте его в currents
3.2. Если он другого цвета - проведите границу между этим соседом и текущей ячейкой.
4. Добавьте текущую ячейку в visited
5. Повторять, пока currents не кончится.
Граница нарисована!