Basic Search Algorithm
- Initialize candidate data structure
- Add an initial state to the data structure
- Initialize visited candidate set
- Loop Forever
- Pick a candidate and remove it from the data structure
- If there are no candidates, quit with failure
- If the candidate has been visited, skip the rest of the inner loop
- If not, add the candidate to the visited set
- Evaluate the candidate
- If the candidate is a solution, quit and return it
- Otherwise:
- Generate some new candidates from the candidate
- Add the new candidates to the data structure