| 行きがけ済 | 帰りがけ済 | 状況 |
|---|---|---|
| False | False | これから訪問するかも |
| False | True | (ありえない) |
| True | False | |
| True | True | その点から帰りがけ未完の点には行けない |
todo: トポソートとかも説明できるようないい感じの解釈がほしい
(なかなか難しい。DFS木と一緒に考えるとわかりやすい?)
とりあえず caller で状態を管理することにする。
caller で状態を管理
// seq が現在の状態、seq_list が結果の蓄積物
fn exec_rec(&self, seq: &mut Vec<usize>, seq_list: &mut Vec<Vec<usize>>) {
if seq.len() == self.r {
seq_list.push(seq.clone());
return;
}
for i in 0..self.n {
seq.push(i); // caller で状態(seq)を管理する
self.exec_rec(seq, seq_list);
seq.pop();
}
}
初回呼び出し時にも caller 呼び出し規則(状態管理)を守る必要があるのが注意点