https://medium.com/coinmonks/traveling-salesman-problem-introduction-to-dynamic-programming-ce858ba0f21e