1 条题解
-
0
线路中的站点建立直达边后 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
- 上传者