#12407. 珅泽教育CSP-J第一轮模拟考第二十七套 第 41 题
珅泽教育CSP-J第一轮模拟考第二十七套 第 41 题
三、完善程序(单项选择题,每题 3 分,共 30 分)
完善程序(2):输出函数图中的所有环
一个有向图有 个顶点,编号为 1 到 ,每个顶点的出度恰好为 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]fastnt