Я не могу гарантировать, что это наиболее эффективное решение, но это решение, поэтому вам следует начать.
Кажется, что граф (вершины с ребрами)естественный способ кодировать эту сетку.Каждый узел имеет 4 или 6 соседей (количество соседей соответствует количеству лепестков).Каждый узел имеет 8 или 12 ребер, по два на каждого соседа.
Каждая вершина имеет координату (x, y), например, первая строка на левом изображении, начиная с левого, находится в местоположении(1,0), следующий узел справа от него (3,0).Первый узел во втором ряду (0,1).Это может позволить вам убедиться, что они построены правильно, но в противном случае координата не имеет к этому никакого отношения.
Проблема заключается в том, что у каждого соседа два разных ребра, каждое из которых выровнено по-своемукруг.Вы можете отождествить их с центрами их кругов, или вы можете просто назвать один «верхний», а другой «нижний».
Эта структура позволяет легко следовать за ребрами и при необходимости может быть сохранена в виде хеш-набора (с указанием координат) или связанного списка.