TheAlgorithms/C++ 1.0.0
All the algorithms implemented in C++
Loading...
Searching...
No Matches
travelling_salesman_problem.cpp File Reference

[Travelling Salesman Problem] (https://en.wikipedia.org/wiki/Travelling_salesman_problem) implementation More...

#include <algorithm>
#include <cassert>
#include <cstdint>
#include <iostream>
#include <limits>
#include <vector>
Include dependency graph for travelling_salesman_problem.cpp:

Go to the source code of this file.

Namespaces

namespace  graph
 Graph Algorithms.
 

Functions

int graph::TravellingSalesmanProblem (std::vector< std::vector< uint32_t > > *cities, int32_t src, uint32_t V)
 Function calculates the minimum path distance that will cover all the cities starting from the source.
 
static void tests ()
 Self-test implementations.
 
int main ()
 Main function.
 

Detailed Description

[Travelling Salesman Problem] (https://en.wikipedia.org/wiki/Travelling_salesman_problem) implementation

Author
Mayank Mamgain

Travelling salesman problem asks: Given a list of cities and the distances between each pair of cities, what is the shortest possible route that visits each city exactly once and returns to the origin city? TSP can be modeled as an undirected weighted graph, such that cities are the graph's vertices, paths are the graph's edges, and a path's distance is the edge's weight. It is a minimization problem starting and finishing at a specified vertex after having visited each other vertex exactly once. This is the naive implementation of the problem.

Definition in file travelling_salesman_problem.cpp.

Function Documentation

◆ main()

int main ( void )

Main function.

Returns
0 on exit

Definition at line 105 of file travelling_salesman_problem.cpp.

105 {
106 tests(); // run self-test implementations
107 std::vector<std::vector<uint32_t>> cities = {
108 {0, 5, 10, 15}, {5, 0, 20, 30}, {10, 20, 0, 35}, {15, 30, 35, 0}};
109 uint32_t V = cities.size();
110 std::cout << graph::TravellingSalesmanProblem(&cities, 0, V) << std::endl;
111 return 0;
112}
int TravellingSalesmanProblem(std::vector< std::vector< uint32_t > > *cities, int32_t src, uint32_t V)
Function calculates the minimum path distance that will cover all the cities starting from the source...
static void tests()
Self-test implementations.

◆ tests()

static void tests ( )
static

Self-test implementations.

Returns
void

Definition at line 78 of file travelling_salesman_problem.cpp.

78 {
79 std::cout << "Initiatinig Predefined Tests..." << std::endl;
80 std::cout << "Initiating Test 1..." << std::endl;
81 std::vector<std::vector<uint32_t>> cities = {
82 {0, 20, 42, 35}, {20, 0, 30, 34}, {42, 30, 0, 12}, {35, 34, 12, 0}};
83 uint32_t V = cities.size();
84 assert(graph::TravellingSalesmanProblem(&cities, 0, V) == 97);
85 std::cout << "1st test passed..." << std::endl;
86
87 std::cout << "Initiating Test 2..." << std::endl;
88 cities = {{0, 5, 10, 15}, {5, 0, 20, 30}, {10, 20, 0, 35}, {15, 30, 35, 0}};
89 V = cities.size();
90 assert(graph::TravellingSalesmanProblem(&cities, 0, V) == 75);
91 std::cout << "2nd test passed..." << std::endl;
92
93 std::cout << "Initiating Test 3..." << std::endl;
94 cities = {
95 {0, 10, 15, 20}, {10, 0, 35, 25}, {15, 35, 0, 30}, {20, 25, 30, 0}};
96 V = cities.size();
97 assert(graph::TravellingSalesmanProblem(&cities, 0, V) == 80);
98 std::cout << "3rd test passed..." << std::endl;
99}