Я знаю, что проверка гамильтонианских путей-NP-Hard. Я написал реализацию, которая использует DFS и поддерживает переменную подсчета для количества изучаемых узлов. DFS строит дерево, и моя интуиция проверяла, существует ли узел листового узла, и не является исследованным NTH Node (n = количество узлов на графике). Это подразумевает, что существует гамильтонского цикла. Достигнув листового узла дерева, есть два случая, если это прямой путь и имеет задний край до корневого, существует гамильтонский цикл. Иначе, должен быть перекрестный срок для какого -то другого узла, кроме его предка (не предка, потому что он уже был изучен, и мы можем посетить узел только один раз, кроме корневого узла). В конце концов, после того, как все узлы исследуются, нам нужно быть на листовом узле, который имеет быстрый обзор корневого узла, который завершает наш гамильтонский цикл. Посещение (num_visited). < /p>
< /li>
Если в любой момент вы достигаете листа (узел без неопубликованных соседей), но num_visited (узлы)
#include
using namespace std;
const int MAX_N = 100;
vector graph[MAX_N];
bool visited[MAX_N];
vector path;
bool possible = true;
int num_visited = 0;
// DFS function
void dfs(int node, int total_nodes) {
visited[node] = true;
num_visited++;
bool has_unvisited_neighbor = false;
for (int neighbor : graph[node]) {
if (!visited[neighbor]) {
has_unvisited_neighbor = true;
dfs(neighbor, total_nodes);
}
}
// If we reach a leaf before visiting all nodes, we assume failure
if (!has_unvisited_neighbor && num_visited < total_nodes) {
possible = false;
}
path.push_back(node);
}
int main() {
int n = 5; // total nodes
int m = 5; // total edges
// Example graph
// 1 - 2 - 3
// |
// 4 - 5
graph[1] = {2};
graph[2] = {1, 3, 4};
graph[3] = {2};
graph[4] = {2, 5};
graph[5] = {4};
dfs(1, n);
if (!possible || num_visited != n) {
cout
Подробнее здесь: https://stackoverflow.com/questions/796 ... ian-pathon
Реализация кода для проверки гамильтонианского пути (O (n)) [закрыто] ⇐ C++
Программы на C++. Форум разработчиков
1750362458
Anonymous
Я знаю, что проверка гамильтонианских путей-NP-Hard. Я написал реализацию, которая использует DFS и поддерживает переменную подсчета для количества изучаемых узлов. DFS строит дерево, и моя интуиция проверяла, существует ли узел листового узла, и не является исследованным NTH Node (n = количество узлов на графике). Это подразумевает, что существует гамильтонского цикла. Достигнув листового узла дерева, есть два случая, если это прямой путь и имеет задний край до корневого, существует гамильтонский цикл. Иначе, должен быть перекрестный срок для какого -то другого узла, кроме его предка (не предка, потому что он уже был изучен, и мы можем посетить узел только один раз, кроме корневого узла). В конце концов, после того, как все узлы исследуются, нам нужно быть на листовом узле, который имеет быстрый обзор корневого узла, который завершает наш гамильтонский цикл. Посещение (num_visited). < /p>
< /li>
Если в любой момент вы достигаете листа (узел без неопубликованных соседей), но num_visited (узлы)
#include
using namespace std;
const int MAX_N = 100;
vector graph[MAX_N];
bool visited[MAX_N];
vector path;
bool possible = true;
int num_visited = 0;
// DFS function
void dfs(int node, int total_nodes) {
visited[node] = true;
num_visited++;
bool has_unvisited_neighbor = false;
for (int neighbor : graph[node]) {
if (!visited[neighbor]) {
has_unvisited_neighbor = true;
dfs(neighbor, total_nodes);
}
}
// If we reach a leaf before visiting all nodes, we assume failure
if (!has_unvisited_neighbor && num_visited < total_nodes) {
possible = false;
}
path.push_back(node);
}
int main() {
int n = 5; // total nodes
int m = 5; // total edges
// Example graph
// 1 - 2 - 3
// |
// 4 - 5
graph[1] = {2};
graph[2] = {1, 3, 4};
graph[3] = {2};
graph[4] = {2, 5};
graph[5] = {4};
dfs(1, n);
if (!possible || num_visited != n) {
cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79671253/code-implementation-for-checking-hamiltonian-pathon[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия