#12407. 珅泽教育CSP-J第一轮模拟考第二十七套 第 41 题

珅泽教育CSP-J第一轮模拟考第二十七套 第 41 题

三、完善程序(单项选择题,每题 3 分,共 30 分)

完善程序(2):输出函数图中的所有环

一个有向图有 n1000n\le1000 个顶点,编号为 1 到 nn,每个顶点的出度恰好为 1,用 nxt[i] 表示后继。输出所有环;先输出编号较小的顶点能够到达的环,每个环从环内编号最小的顶点开始输出。

#include <bits/stdc++.h>
using namespace std;
int n, fast, low, nt;
int nxt[1005];
int main(){
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
        scanf("%d", &nxt[i]);
    for (int i = 1; i <= n; i++){
        if (nxt[i]){
            low = fast = i;
            do{
                low = nxt[low];
                fast = nxt[nxt[fast]];
            }while (___(1)___);
            int minnode = fast;
            do{
                fast = nxt[fast];
                minnode = min(minnode, fast);
            }while (___(2)___);
            fast = minnode;
            while (___(3)___){
                nt = nxt[fast];
                printf("%d ", fast);
                nxt[fast] = ___(4)___;
                ___(5)___;
            }
            if (fast) printf("\n");
        }
    }
    return 0;
}

③处应该填( )。

{{ select(1) }}

  • nxt[fast]
  • nxt[nt]
  • fast
  • nt