0 / 0 / 0
Регистрация: 19.11.2021
Сообщений: 3
1

Гамильтонов цикл для неориентированного графа

19.11.2021, 20:00. Показов 1333. Ответов 5

Author24 — интернет-сервис помощи студентам
Есть код для нахождения Гамильтонова цикла в графе который задается матрицой.

Можно ли как-то сделать код для Списка инцидентности?
в нем мы задаем от какой точки к какой будет путь построен, но так как это неориентированный граф, то мы должны задавать в разном порядке и все должно работать

код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <vector>
#include <Windows.h>
#include <stack>
#include <unordered_map>
#include <string>
#include <iostream>
using namespace std;
 
#define V 5
 
void printSolution(int path[]);
 
bool isSafe(int v, bool graph[V][V],
    int path[], int pos)
{
    if (graph[path[pos - 1]][v] == 0)
        return false;
 
 
    for (int i = 0; i < pos; i++)
        if (path[i] == v)
            return false;
 
    return true;
}
 
bool hamCycleUtil(bool graph[V][V],
    int path[], int pos)
{
    if (pos == V)
    {
        if (graph[path[pos - 1]][path[0]] == 1)
            return true;
        else
            return false;
    }
 
    for (int v = 1; v < V; v++)
    {
        if (isSafe(v, graph, path, pos))
        {
            path[pos] = v;
 
            if (hamCycleUtil(graph, path, pos + 1) == true)
                return true;
 
            path[pos] = -1;
        }
    }
 
    return false;
}
 
bool hamCycle(bool graph[V][V])
{
    int* path = new int[V];
    for (int i = 0; i < V; i++)
        path[i] = -1;
 
    path[0] = 0;
    if (hamCycleUtil(graph, path, 1) == false)
    {
        cout << "\nSolution does not exist";
        return false;
    }
 
    printSolution(path);
    return true;
}
 
void printSolution(int path[])
{
    cout << "Solution Exists:"
        " Following is one Hamiltonian Cycle \n";
    for (int i = 0; i < V; i++)
        cout << path[i] << " ";
 
    cout << path[0] << " ";
    cout << endl;
}
 
int main()
{
    bool graph1[V][V] = { {0, 1, 0, 1, 0},
                        {1, 0, 1, 1, 1},
                        {0, 1, 0, 0, 1},
                        {1, 1, 0, 0, 1},
                        {0, 1, 1, 1, 0} };
 
    hamCycle(graph1);
 
    bool graph2[V][V] = { {0, 1, 0, 1, 0},
                         {1, 0, 1, 1, 1},
                         {0, 1, 0, 0, 1},
                         {1, 1, 0, 0, 0},
                         {0, 1, 1, 0, 0} };
 
    hamCycle(graph2);
 
    return 0;
}
Добавлено через 1 час 27 минут
Никто не знает?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2021, 20:00
Ответы с готовыми решениями:

Ввод списка ребер для взвешенного неориентированного графа
Здравствуйте, подскажите, пожалуйста, как сделать следующую вещь. Имеется вот такой код для...

Поиск кратчайших путей из одного источника для неориентированного графа
Дорогие программисты! Прошу вас помочь мне в очень срочном деле! Очень нужен код программы,...

Найти длину кратчайшего пути из А в B для взвешенного неориентированного графа
Здравствуйте. Программа находит длину кратчайшего пути из А в B для взвешенного неориентированного...

Для заданного списка рёбер неориентированного графа проверьте, является ли он полным
Здравствуйте! Нужна помощь с задачей: Граф называется полным, если любая пара его различных...

K-связность неориентированного графа
Ребят, третью неделю уже думаю, не могу решить. Нужно написать программу на с++, определяющую...

5
Злостный нарушитель
9603 / 5196 / 1185
Регистрация: 12.03.2015
Сообщений: 24,537
19.11.2021, 20:04 2
Цитата Сообщение от KolyaLeonov Посмотреть сообщение
Никто не знает?
Дело не в этом. Главное - штоб задача интересная была. Интересная настолько, чтобы отложить лежание на диване в пятницу вечером (с пивом, канешна) и взяться за решение проблемы неизвестного анонимуса.

0
0 / 0 / 0
Регистрация: 19.11.2021
Сообщений: 3
20.11.2021, 12:19  [ТС] 3
Можете хотя-бы подсказать как? Я сам попробую

Добавлено через 4 минуты
Verevkin, Понял, видимо придётся самому пытаться
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37352 / 20782 / 4277
Регистрация: 12.02.2012
Сообщений: 34,192
Записей в блоге: 14
20.11.2021, 13:04 4
Цитата Сообщение от KolyaLeonov Посмотреть сообщение
матрицой.
- матрицей

Да, конечно. И самое простое - из списка инцидентности получить матрицу (смежности или инцидентности - надо смотреть). Задача будет сведена к предыдущей.
0
0 / 0 / 0
Регистрация: 19.11.2021
Сообщений: 3
21.11.2021, 17:02  [ТС] 5
Catstail, следующий мой вопрос, это как из списка получить матрицу
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37352 / 20782 / 4277
Регистрация: 12.02.2012
Сообщений: 34,192
Записей в блоге: 14
21.11.2021, 20:15 6
KolyaLeonov, это не особо трудно. Дайте список инцидентности, я напишу код, который строит матрицу смежности.
0
21.11.2021, 20:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.11.2021, 20:15
Помогаю со студенческими работами здесь

Обход неориентированного графа в глубину
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;vector&gt; #include &lt;conio.h&gt; #include &lt;locale.h&gt;...

Матрица смежности неориентированного графа
#include &lt;iostream&gt;; #include &lt;fstream&gt;; using namespace std; int main() { string input =...

Количество рёбер неориентированного графа
Я сделал ориентированый граф, а от как сделать неориентированый граф, я уже не знаю как, помогите...

Гамильтонов цикл
надо разобрать прогу.выявления Гамильтонова цикла в графе...

Гамильтонов цикл в графе
Нужно написать функцию нахождения гамильтонова цикла в графе. Цикл ищется по матрице смежности...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru