A branch and bound algorithm for the traveling purchaser problem