Ещё раз внимательно перечитал условие. Похоже, тут просто требуется найти все грани плоской укладки графа, причём она уже дана: граф представлен набором отрезков. Думаю, тут всё же подойдёт алгоритм, использующий расположение этих точек на плоскости. В моём представлении он может выглядеть так:
Пусть на плоскости задана прямоугольная декартова система координат с координатными векторами
![$\boldsymbol{i},\;\boldsymbol{j} $ $\boldsymbol{i},\;\boldsymbol{j} $](https://dxdy-02.korotkov.co.uk/f/9/f/e/9fe938ef4f9f3a5bdfa2892d83f98e1d82.png)
. Также задано рассматриваемое множество отрезков.
1. Среди концов рассматриваемых отрезков возьмём точку
![$p_1$ $p_1$](https://dxdy-03.korotkov.co.uk/f/e/4/8/e48fedf0490f51b6457b8c979bc10c2782.png)
, заведомо принадлежащую внешней грани, а именно какую-нибудь точку с наименьшей координатой
![$x$ $x$](https://dxdy-04.korotkov.co.uk/f/3/3/2/332cc365a4987aacce0ead01b8bdcc0b82.png)
.
2. Среди всех точек, соединённых отрезками с точкой
![$p_1$ $p_1$](https://dxdy-03.korotkov.co.uk/f/e/4/8/e48fedf0490f51b6457b8c979bc10c2782.png)
, выберем точку
![$p_2$ $p_2$](https://dxdy-01.korotkov.co.uk/f/0/b/6/0b6c661a59575c2a0dec00e00dacfe2982.png)
, такую, что угол между
![$\boldsymbol{j}$ $\boldsymbol{j}$](https://dxdy-03.korotkov.co.uk/f/a/9/3/a93609daa831d1c26062db671462477482.png)
и
![$\overrightarrow{p_1p_2}$ $\overrightarrow{p_1p_2}$](https://dxdy-04.korotkov.co.uk/f/7/0/0/700db54c5a83cba5de4a85456a912df982.png)
, отсчитываемый по часовой стрелке, минимален.
3. Находясь в точке
![$p_i$ $p_i$](https://dxdy-01.korotkov.co.uk/f/0/d/1/0d19b0a4827a28ecffa01dfedf5f5f2c82.png)
, выбираем следующую точку,
![$p_{i+1}$ $p_{i+1}$](https://dxdy-04.korotkov.co.uk/f/7/b/4/7b4a5293e1c20fd05064e3dece05c3ff82.png)
, среди всех точек, соединённых отрезками с
![$p_i$ $p_i$](https://dxdy-01.korotkov.co.uk/f/0/d/1/0d19b0a4827a28ecffa01dfedf5f5f2c82.png)
, кроме
![$p_{i-1}$ $p_{i-1}$](https://dxdy-04.korotkov.co.uk/f/3/1/b/31bfa54cf15dcbc5b0e7226b5742092982.png)
, такую, что угол между
![$\overrightarrow{p_{i-1}p_i}$ $\overrightarrow{p_{i-1}p_i}$](https://dxdy-01.korotkov.co.uk/f/8/4/c/84c12f0eb9d857e85554f06cd9bcfd4482.png)
и
![$\overrightarrow{p_{i}p_{i+1}}$ $\overrightarrow{p_{i}p_{i+1}}$](https://dxdy-03.korotkov.co.uk/f/a/4/8/a487231e00b7f20572fe72eb94fa8cd482.png)
, отсчитываемый по часовой стрелке, максимален.
Повторять этот шаг до возвращения в точку
![$p_1$ $p_1$](https://dxdy-03.korotkov.co.uk/f/e/4/8/e48fedf0490f51b6457b8c979bc10c2782.png)
.
4. Найденная последовательность точек представляет собой очередную грань. Отрезок
![$p_1p_2$ $p_1p_2$](https://dxdy-03.korotkov.co.uk/f/a/e/a/aeaa72b101b35d571792b460156af3ab82.png)
не принадлежит никакой другой грани. Исключим его из дальнейшего рассмотрения.
4а. Если имеется "висячая" точка, являющаяся концом только одного отрезка, исключим эту точку и этот отрезок из дальнейшего рассмотрения. Будем повторять этот шаг, пока таких точек не останется.
5. Если у нас ещё остались отрезки, перейдём к шагу 1.
Взаимную ориентацию векторов можно определить с помощью векторного произведения.
![Smile :-)](./images/smilies/icon_smile.gif)