#13185. 珅泽教育CSP-J第一轮模拟考第三十套 第 42 题

珅泽教育CSP-J第一轮模拟考第三十套 第 42 题

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

完善程序(2):无向图最短环

图无自环、无重边,要求返回最短环长度;不存在环时返回 -1

#include <bits/stdc++.h>
using namespace std;

int n;
vector<vector<int>> g(1005);

int findShortestCycle() {
    int ans = (___(2)___);
    int vis[1005] = {0};
    int dist[1005];
    int fa[1005];
    memset(dist, 0x3f, sizeof dist);
    for (int i = 0; i < n; i++) {
        memset(vis, 0, sizeof vis);
        memset(fa, -1, sizeof fa);
        queue<int> q;
        q.push(i);
        fa[i] = i;
        vis[i] = (___(3)___);
        dist[i] = 0;
        while (!q.empty()) {
            int x = q.front();
            q.pop();
            for (int j = 0; j < g[x].size(); j++) {
                int y = g[x][j];
                if (!vis[y]) {
                    q.push(y);
                    dist[y] = dist[x] + 1;
                    (___(4)___);
                    vis[y] = i + 1;
                    continue;
                }
                if (vis[y] == i + 1 && y != fa[x]) {
                    ans = (___(5)___);
                }
            }
        }
    }
    ans = (ans == 1e9 ? -1 : ans);
    return ans;
}

int main() {
    cin >> n;
    for (int i = 0; i < n; i++) {
        int u, v;
        scanf("%d %d", &u, &v);
        g[u].push_back(v);
        (___(1)___);
    }
    cout << findShortestCycle();
    return 0;
}

④处应填( )。

{{ select(1) }}

  • fa[y]=x
  • fa[x]=y
  • fa[x]=x
  • fa[y]=y