一般的方法是记录状态是从哪儿转移来的然后递归输出。
但是明显递归有爆栈的危险。
所以可以用一个 (增加理解难度而实际没用的) 方法来避免。
具体来说,用一个vector保存答案。
例如这一题中,一般题解是用
void print(int x,int y) { if(pre[x][y]==y) { cout<<y<<" "; return; } print(x-1,pre[x][y]); cout<<y<<" ";//记得输出是逆序的 }
来输出的,而我用了
int x = F; std::vector<int> v; for(; x >= 1; y = pre[x][y], x--) v.push_back(y); reverse(v.begin(), v.end()); cout<<ans<<endl; for(int i = 0; i < (int) v.size(); i++) cout<<v[i]<<" "; puts("");
来处理。
有什么用呢?增加代码长度与理解难度(笑)
原文:https://www.cnblogs.com/wsmrxc/p/8955572.html