1 条题解

  • 0
    @ 2025-2-22 10:45:16

    线路中的站点建立直达边后 floyd

    #include <bits/stdc++.h>
    using namespace std;
    const int MAXN = 500;
    const int MAXM = 100;
    int m, n;
    vector<int> ee[MAXM + 5];
    // 辅助输入,字符串流类似于输入输出流,可以往里面丢东西和拿东西出来
    string s;
    stringstream ss;
    // 存图/最短路
    int dis[MAXN + 5][MAXN + 5];
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        // 输入
        cin >> m >> n;
        getline(cin, s); // 吃一个 n 后面的换行
        for (int i = 1; i <= m; i++)
        {
            getline(cin, s); // 读取一整行
            ss.clear();      // 字符串流清空
            ss << s;         // 字符串放进字符串流
            int last = -1, now;
            while (ss >> now) // 从字符串流读整数直到流结束
                ee[i].push_back(now);
        }
        // 建新图
        for (int T = 1; T <= m; T++)
            for (int i = 0; i < ee[T].size(); i++)
                for (int j = i + 1; j < ee[T].size(); j++)
                    dis[ee[T][i]][ee[T][j]] = 1;
        // floyd
        for (int k = 1; k <= n; k++)
            for (int i = 1; i <= n; i++)
                for (int j = 1; j <= n; j++)
                    if (dis[i][k] && dis[k][j])
                    {
                        if (!dis[i][j] ||
                            dis[i][k] + dis[k][j] < dis[i][j])
                            dis[i][j] = dis[i][k] + dis[k][j];
                    }
        // 输出
        if (dis[1][n] == 0)
            cout << "NO";
        else
            cout << dis[1][n] - 1;
        return 0;
    }
    
    • 1

    信息

    ID
    606
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    (无)
    递交数
    42
    已通过
    17
    上传者