
最近学习了DFS算法,针对这一知识点练习了两道经典的题目,颇有体会。
从代码实现看,为了实现回溯,两种问题都可以用for里嵌套while实现
1 2 3 4
|
for 每个分岔点: while (满足条件): // 此时如果不满足,则自然用for切到下一种情况 向下搜索
|
八皇后问题示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
bool (int* answers, int n) { if (n == 8) { print_answer(answers); cnt++; return true; } for (int i = 0; i < 8; ++i) { answers[n] = i; if (is_match(answers, n)) { find_position(answers, n + 1); } else { answers[n] = 0; } } return false; }
|
近期评论