关于 try catch 在 oi 中的应用
查看原帖
关于 try catch 在 oi 中的应用
224978
optimize_2楼主2023/10/15 10:46

我以为是 c++ 语言基础,做这题的时候看到题解代码发现大家都不用,我普及一下。

这题多组数据,如果有长度为 0 的环并且在 dfs 中找到就输出 -1。

如果没有多组数据,那可以

void dfs(...) {
    ...
    puts("-1");
    exit(0);
    ...
}

遗憾的,这题有多组数据 所以可以这么写

void dfs(...) {
    ...
    puts("-1");
    throw -1;
    ...
}

int main() {
    ...
    while (T--) {
        ...
        try {
            for (int i = 0; i <= k; i++) {
                (ans += dfs(n, i)) %= p;
            }
            printf("%d\n", ans);
        } catch (int exception) {
            assert(exception == -1);
            puts("-1");
        }
    }
    ...
}

throw -1 之后,会在递归栈里一路往上找到一个符合条件的 catch 代码块,所以这些 dfs 都自动退出了,然后执行 main 里的 puts("-1");。

如果不这么写,可能要让 dfs 的返回值变成 -1,然后在每次递归的时候都判断一下返回值有没有 -1,有的话继续返回 -1。

用 try catch throw 写控制流应该还是挺方便的。

2023/10/15 10:46
加载中...