What is the travelling salesman problem, what are its variants? What are the good solutions to this problem? What are its pratical applications?