It is used to find all possible solutions available to the problem.
It traverse tree by DFS(Depth First Search).
It realizes that it has made a bad choice & undoes the last choice
by backing up.
It search the state space tree until it found a solution.
It involves feasibility function.
Branch-and-Bound
It is used to solve optimization problem.
It may traverse the tree in any manner, DFS or BFS.
It realizes that it already has a better optimal solution that the
pre-solution leads to so it abandons that pre-solution.
It completely searches the state space tree to get optimal solution.
It involves bounding function.
Searches a solution space that is often organized as a tree (like
backtracking)
Usually searches a tree in a breadth-first / least-cost manner
(unlike backtracking)
Difference between DFS and backtracking is:
Backtracking is a more general purpose algorithm. Depth-First
search is a specific form of backtracking related to searching tree
or graphic structures.
For a problem, answer space can be described as a tree
graphic structure, such as 0/1 backpack problem. at this time,
backtracking use DFS to search the answer space, and use
questions related condition to prune the sub-tree and com back.
So in this way, you can think backtracking = DFS+prune.
For mouse raze, because, prune is "no next neighbor", just like
DFS, so DFS and backtracking are the totally same.
Difference between branch-bound and backtracking is about size
backtracking use stack and only add one child each time, so it use
less memory compared with branch-bound
branch-bound store all possible child in queue, so if answer is near
root, it will find answer quickly.
win in size, but lose in time. backtracking will 1) find answer
slowly, 2) branch-bound will find optimal answer.
A example can be see in ref PPT. container and ship problems.