Locus No Pilotus
Project of four first grade MIPT DAFE/RSE students (for engineering practical work in the second semester) in Qt C++
Loading...
Searching...
No Matches
tspgraph.h
Go to the documentation of this file.
1#pragma once
2
3// std libs:
4#include <map>
5#include <memory>
6#include <optional>
7
8// our code libs:
9#include "adjacency_matrix.h"
10
11namespace math {
12
13/// @brief Ребро между двумя контрольными точками
14struct Edge {
15 /**
16 * @brief Создает новый экземпляр Edge
17 * @param edge: упорядоченная пара точек
18 */
19 Edge(std::pair<std::size_t, std::size_t> edge)
20 : start_num{edge.first}, end_num{edge.second} {}
21 std::size_t start_num;
22 std::size_t end_num;
23};
24
25/// @brief Вершина дерева с соответствующей матрицей смежности
26struct TSPNode {
27 /**
28 * @brief Создает новый экземпляр TSPNode
29 * @param m: матрица смежности
30 * @param prev_node: родитель вершины
31 * @param new_edge: новое ребро маршрута
32 * @param graph_chains: завершенные цепи в уже существующем маршруте
33 */
35 std::optional<std::shared_ptr<TSPNode>> prev_node = std::nullopt,
36 std::optional<Edge> new_edge = std::nullopt,
37 std::optional<std::map<std::size_t, std::size_t>> graph_chains =
38 std::nullopt)
39 : matrix{m}, evaluation{m.GetBottomLineEvaluation()} {
40 if (prev_node) {
41 evaluation += (**prev_node).evaluation;
42 path = (**prev_node).path;
43 if (graph_chains)
44 chains = *graph_chains;
45 else
46 chains = (**prev_node).chains;
47 }
48 if (new_edge) path.push_back(*new_edge);
49 }
50
51 std::shared_ptr<TSPNode> with_edge = nullptr;
52 std::shared_ptr<TSPNode> without_edge = nullptr;
54 double evaluation;
55 std::vector<Edge> path;
56 std::map<std::size_t, std::size_t> chains;
57};
58
59} // namespace math
Матрица смежности для алгоритма Литтла
Definition adjacency_matrix.h:23
Definition adjacency_matrix.cpp:7
Ребро между двумя контрольными точками
Definition tspgraph.h:14
std::size_t start_num
Definition tspgraph.h:21
std::size_t end_num
Definition tspgraph.h:22
Edge(std::pair< std::size_t, std::size_t > edge)
Создает новый экземпляр Edge.
Definition tspgraph.h:19
Вершина дерева с соответствующей матрицей смежности
Definition tspgraph.h:26
std::vector< Edge > path
Definition tspgraph.h:55
std::shared_ptr< TSPNode > with_edge
Definition tspgraph.h:51
std::map< std::size_t, std::size_t > chains
Definition tspgraph.h:56
AdjacencyMatrix matrix
Definition tspgraph.h:53
double evaluation
Definition tspgraph.h:54
std::shared_ptr< TSPNode > without_edge
Definition tspgraph.h:52
TSPNode(const AdjacencyMatrix &m, std::optional< std::shared_ptr< TSPNode > > prev_node=std::nullopt, std::optional< Edge > new_edge=std::nullopt, std::optional< std::map< std::size_t, std::size_t > > graph_chains=std::nullopt)
Создает новый экземпляр TSPNode.
Definition tspgraph.h:34