Вот моё доказательство.
Если кто найдет ошибку или какие-то неясности, то пожалуйста прокомментируйте. Тем более, что доказательство получилось немаленькое, так что там может быть всяко-разно.
Доказательство проведем в три этапа.
Этап 1. Простые цепи в различных компонентах связности.
Возьмем граф с исходными условиями (граф G) и выберем две произвольные несмежные вершины X и Y. Если их удалить граф распадется на две компоненты
![G_1 G_1](https://dxdy-04.korotkov.co.uk/f/b/5/7/b57eb533b3d9c18d104bb0b9a5a80bbe82.png)
и
![G_2 G_2](https://dxdy-03.korotkov.co.uk/f/a/d/e/ade318cc7367b7f1b4127eddc5f4899f82.png)
. Каждая из вершин X и Y имеет в первоначальном графе ребра как к
![G_1 G_1](https://dxdy-04.korotkov.co.uk/f/b/5/7/b57eb533b3d9c18d104bb0b9a5a80bbe82.png)
так и к
![G_2 G_2](https://dxdy-03.korotkov.co.uk/f/a/d/e/ade318cc7367b7f1b4127eddc5f4899f82.png)
. Если бы одна из вершин не имела связи с одной из компонент, то достаточно было бы удалить только вторую вершину и получить несвязные между собой компоненты (а это нарушает условие). А так как обе компоненты связные, то это значит, что существует путь в исходном графе из X в Y, состоящий из ребра от X к какой-то вершине компоненты
![G_1 G_1](https://dxdy-04.korotkov.co.uk/f/b/5/7/b57eb533b3d9c18d104bb0b9a5a80bbe82.png)
, дальше по вершинам только этой компоненты и в конце от
![G_1 G_1](https://dxdy-04.korotkov.co.uk/f/b/5/7/b57eb533b3d9c18d104bb0b9a5a80bbe82.png)
до Y (в силу связности
![G_1 G_1](https://dxdy-04.korotkov.co.uk/f/b/5/7/b57eb533b3d9c18d104bb0b9a5a80bbe82.png)
). Тоже самое для X,
![G_2 G_2](https://dxdy-03.korotkov.co.uk/f/a/d/e/ade318cc7367b7f1b4127eddc5f4899f82.png)
и Y.
На самом деле таких путей по каждой компоненте может быть несколько, но один в силу вышесказанного для каждой компоненты существует. Заметим, что хотя найденные пути могут оказаться не простыми, но их всегда можно сделать простыми, отбрасывая ненужные циклы.
Кстати, если бы по каким-либо причинам G раскололся на три и более компонент. То такой путь существовал бы для каждой (в силу двусвязности).
Этап 2. Существование Гамильтонова цикла.
Утверждается, что в графе G обязательно существует Гамильтонов цикл (простой цикл, проходящий через все вершины). Докажем это. Доказательство проведем конструктивно, то есть построим алгоритм находящий Гамильтонову цепь (простая цепь через все вершины), а потом преобразуем её в цикл.
Обозначим за
![A_k=(a_1,a_2,…, a_k) A_k=(a_1,a_2,…, a_k)](https://dxdy-03.korotkov.co.uk/f/2/a/0/2a0565574359ff951841cacd43e4cd1882.png)
цепь, которая образуется на некотором цикле алгоритма и состоящая из k вершин (в порядке, как они представлены в записи).
![G^k G^k](https://dxdy-01.korotkov.co.uk/f/8/a/8/8a8a70d136de22a81fd98bc33029c8d682.png)
– это множество вершин, которые еще не принадлежат цепи на том же цикле. На каждом цикле последняя вершина
![a_k a_k](https://dxdy-03.korotkov.co.uk/f/6/c/6/6c63df29780290d3c3aab151b600958982.png)
будет считаться текущей вершиной для присоединения новых вершин или простых цепей.
Алгоритм
1. Выбираем произвольную вершину и помещаем её в
![A_1 A_1](https://dxdy-01.korotkov.co.uk/f/4/b/e/4be60c01260fad068dd84cb934d15c3682.png)
и соответственно получаем множество
![G^1 G^1](https://dxdy-02.korotkov.co.uk/f/5/8/3/5834b6e43c927a1daf020415caaddec282.png)
(уже без этой вершины).
![a_1 a_1](https://dxdy-01.korotkov.co.uk/f/0/2/7/027c3429f98f7c39bab027549e1b9c7b82.png)
– текущая вершина.
2. Выбираем из
![G^k G^k](https://dxdy-01.korotkov.co.uk/f/8/a/8/8a8a70d136de22a81fd98bc33029c8d682.png)
произвольную вершину
![X X](https://dxdy-01.korotkov.co.uk/f/0/2/1/02129bb861061d1a052c592e2dc6b38382.png)
. Рассматриваем две вершины
![a_1 a_1](https://dxdy-01.korotkov.co.uk/f/0/2/7/027c3429f98f7c39bab027549e1b9c7b82.png)
и
![X X](https://dxdy-01.korotkov.co.uk/f/0/2/1/02129bb861061d1a052c592e2dc6b38382.png)
.
Если они смежные, то добавляем вершину
![X X](https://dxdy-01.korotkov.co.uk/f/0/2/1/02129bb861061d1a052c592e2dc6b38382.png)
в цепь и делаем её текущей (соответственно меняем
![k k](https://dxdy-01.korotkov.co.uk/f/8/c/e/8ce4b16b22b58894aa86c421e8759df382.png)
и удаляем из
![G^{k+1} G^{k+1}](https://dxdy-01.korotkov.co.uk/f/8/5/a/85ab4e8331f39ce874e12262feede62382.png)
вершину
![X X](https://dxdy-01.korotkov.co.uk/f/0/2/1/02129bb861061d1a052c592e2dc6b38382.png)
). Если же вершины несмежные, то удалив их из исходного графа получим несколько компонент связности, причем в одной из компонент связности будут находится все вершины цепи
![A_k A_k](https://dxdy-04.korotkov.co.uk/f/3/6/b/36b7a5a0150dd4e04b4078a7f3aeeac782.png)
, за исключением вершины
![a_k a_k](https://dxdy-03.korotkov.co.uk/f/6/c/6/6c63df29780290d3c3aab151b600958982.png)
, которая удаляется из графа. Исходя из этапа 1 существует простая цепь, находящаяся полностью в другой компоненте связности и соединяющая
![a_k a_k](https://dxdy-03.korotkov.co.uk/f/6/c/6/6c63df29780290d3c3aab151b600958982.png)
и
![X X](https://dxdy-01.korotkov.co.uk/f/0/2/1/02129bb861061d1a052c592e2dc6b38382.png)
. Раз эта цепь находится в другой компоненте связности, то она не имеет пересечений с цепью
![A_k A_k](https://dxdy-04.korotkov.co.uk/f/3/6/b/36b7a5a0150dd4e04b4078a7f3aeeac782.png)
, и может продлить цепь
![A_k A_k](https://dxdy-04.korotkov.co.uk/f/3/6/b/36b7a5a0150dd4e04b4078a7f3aeeac782.png)
до вершины
![X X](https://dxdy-01.korotkov.co.uk/f/0/2/1/02129bb861061d1a052c592e2dc6b38382.png)
(Здесь надо добавить цепь в конец
![A_k A_k](https://dxdy-04.korotkov.co.uk/f/3/6/b/36b7a5a0150dd4e04b4078a7f3aeeac782.png)
и удалить вершины цепи из
![G^k G^k](https://dxdy-01.korotkov.co.uk/f/8/a/8/8a8a70d136de22a81fd98bc33029c8d682.png)
, увеличить
![k k](https://dxdy-01.korotkov.co.uk/f/8/c/e/8ce4b16b22b58894aa86c421e8759df382.png)
на длину пристыкованной цепи). То есть после шага 2 длина простой цепи увеличиться.
3. Если в множестве
![G_k G_k](https://dxdy-01.korotkov.co.uk/f/c/2/e/c2ea3ff285c8537c2e3d9a7db7c554e582.png)
, остались вершины, то переходим к шагу 2, иначе получена простая (Гамильтонова) цепь из всех вершин графа
![G G](https://dxdy-02.korotkov.co.uk/f/d/f/c/dfcf28d0734569a6a693bc8194de62bf82.png)
.
Алгоритм всегда завершается построением Гамильтоновой цепи, так как на каждом цикле цепь увеличивается. Ну и поскольку любая оставшаяся вершина графа может быть или смежной с
![a_k a_k](https://dxdy-03.korotkov.co.uk/f/6/c/6/6c63df29780290d3c3aab151b600958982.png)
или несмежной, то все они рано или поздно за конечное количество циклов (не более количества вершин n в исходном графе) будут подключены к цепи.
Примечание. Ради интереса можно посмотреть, что произойдет, когда в графе останется только одна неподключенная к цепи вершина. На самом деле, эта вершина может быть только смежной к вершине
поскольку вся остальная цепь оказывается в одной компоненте связности (второй компоненты нет, и граф остается связным) после удаления
и этой последней вершины из графа. То есть, эта вершина подключается как смежная к
.
Последний вопрос на этом этапе это превращения Гамильтоновой цепи в Гамильтонов цикл. Из тех же соображений, что указаны в примечании, оказывается, что вершины
![a_1 a_1](https://dxdy-01.korotkov.co.uk/f/0/2/7/027c3429f98f7c39bab027549e1b9c7b82.png)
и
![a_n a_n](https://dxdy-01.korotkov.co.uk/f/8/2/5/825b3fd5bafbc46b9a560ea9f16b21dd82.png)
смежные и могут быть соединены ребром. Таким образом, Гамильтонов цикл построен.
Этап 3. Единственность цикла.
То, что существует Гамильтонов цикл ещё не значит, что это единственный цикл в исходном графе
![G G](https://dxdy-02.korotkov.co.uk/f/d/f/c/dfcf28d0734569a6a693bc8194de62bf82.png)
. Предположим, что Гамильтонов цикл построен. По определению он простой и проходит через все вершины. Если в графе
![G G](https://dxdy-02.korotkov.co.uk/f/d/f/c/dfcf28d0734569a6a693bc8194de62bf82.png)
нет других ребер, кроме принадлежащих Гамильтонову циклу, то единственность автоматически доказана. Предположим, что есть еще какие то ребра не входящие в Гамильтонов цикл. Любое из таких ребер соединяет две вершины Гамильтонова цикла (причем эти вершины не являются смежными в Гамильтоновом цикле, иначе это бы означало, что две вершины может соединять несколько ребер). Возьмем такое ребро
![z z](https://dxdy-04.korotkov.co.uk/f/f/b/a/fbade9e36a3f36d3d676c1b808451dd782.png)
, этим ребром цикл разделится на две части
![B_1 B_1](https://dxdy-03.korotkov.co.uk/f/2/6/2/262e0afc75c8a9fc536a7dce57e6ebe182.png)
и
![B_2 B_2](https://dxdy-03.korotkov.co.uk/f/6/f/5/6f5ef944a2d6b5db7b0f5eb7664fbe8d82.png)
. В каждой из частей обязательно есть вершина(
![X_1 X_1](https://dxdy-01.korotkov.co.uk/f/0/d/5/0d5fa3f335333b23d4aaf795d133658782.png)
в
![B_1 B_1](https://dxdy-03.korotkov.co.uk/f/2/6/2/262e0afc75c8a9fc536a7dce57e6ebe182.png)
и
![X_2 X_2](https://dxdy-03.korotkov.co.uk/f/e/2/0/e209e24a3d42a840c21481572570342f82.png)
в
![B_2 B_2](https://dxdy-03.korotkov.co.uk/f/6/f/5/6f5ef944a2d6b5db7b0f5eb7664fbe8d82.png)
), не принадлежащая добавленному ребру
![z z](https://dxdy-04.korotkov.co.uk/f/f/b/a/fbade9e36a3f36d3d676c1b808451dd782.png)
. Если удалить эти две вершины (
![X_1 X_1](https://dxdy-01.korotkov.co.uk/f/0/d/5/0d5fa3f335333b23d4aaf795d133658782.png)
и
![X_2 X_2](https://dxdy-03.korotkov.co.uk/f/e/2/0/e209e24a3d42a840c21481572570342f82.png)
) из графа, то граф останется связным в силу существования дополнительного ребра
![z z](https://dxdy-04.korotkov.co.uk/f/f/b/a/fbade9e36a3f36d3d676c1b808451dd782.png)
между вершинами Гамильтонова цикла. Это не соответствует исходным условиям, наложенным на граф
![G G](https://dxdy-02.korotkov.co.uk/f/d/f/c/dfcf28d0734569a6a693bc8194de62bf82.png)
и это означает, что в графе
![G G](https://dxdy-02.korotkov.co.uk/f/d/f/c/dfcf28d0734569a6a693bc8194de62bf82.png)
не существует никаких других рёбер, кроме принадлежащих Гамильтонову циклу.
Что и доказывает единственность данного цикла (Гамильтонова) в графе.