-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGraph.cpp
107 lines (77 loc) · 2.17 KB
/
Graph.cpp
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
102
103
104
105
106
107
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <fstream>
#include "Graph.h"
using namespace std;
Graph::Graph()
{
}
bool Graph::data_input(const string file_name) { // Считывание данных из файла
int tek;
ifstream in_file;
in_file.open(file_name);
if (in_file) { // если файл успешно открылся
if (in_file >> n && n>0) {
while (!in_file.eof()) {
if(in_file >> tek && tek>0)
Vert.push_back(tek);
else return false;
}
}
else return false;
}
else return false;
in_file.close();
return true;
};
void Graph::create_A() { // Создание матрицы смежности
A = (int **)malloc(n * sizeof(int *));
for (int i = 0; i < n; i++)
A[i] = (int *)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (sqrt(Vert[i] + Vert[j]) - (int)sqrt(Vert[i] + Vert[j]) < 0.001) A[i][j] = 1;
else A[i][j] = 0;
}
}
for (int i = 0; i < n; i++) // Инициализация вектора посещения вершин
Visited.push_back(false);
};
bool Graph::hamilton(int curr) // Нахождение гамильтонова пути
{
Path.push_back(curr);
if (Path.size() == n)
return true;
Visited[curr] = true;
for (int nxt = 0; nxt < n; ++nxt) {
if (A[curr][nxt] == 1 && !Visited[nxt])
if (hamilton(nxt)) return true;
}
Visited[curr] = false;
Path.pop_back();
return false;
};
void Graph::data_output(const string file_name) { // Запись пути в файл
ofstream answerFile;
answerFile.open(file_name);
for (int i = 0; i < n; i++) {
answerFile << Vert[Path[i]] << " ";
}
answerFile.close();
}
void Graph::no_way_answer(const string file_name) { // Запись отрицательного ответа
ofstream no_wayFile;
no_wayFile.open(file_name);
no_wayFile << "It's impossible";
no_wayFile.close();
}
void Graph::error_output(const string file_name) { // Вывод ошибки
ofstream errorFile;
errorFile.open(file_name);
errorFile << "Error";
errorFile.close();
}
Graph::~Graph()
{
}