{"title":"using namespace std; \nint x, y, _k, l, n, m, e[1000][1000], f[1000], sum = 0, cnt, book[1000]; \nint find(int x) \n{ \n if (x == f[x]) \n return x; \n else \n return f[x] = find(f[x]); \n} \nint main() \n{ \n cin >> n >> m >> _k; \n for (int i = 1; i <= n; i++) \n { \n f[i] = i; \n } \n for (int i = 1; i <= n; i++) \n { \n for (int j = 1; j <= n; j++) \n { \n e[i][j] = 11; \n if (i == j) \n e[i][j] = 0; \n } \n } \n for (int i = 1; i <= m; i++) \n { \n cin >> x >> y >> l; \n e[x][y] = l; \n e[y][x] = l; \n } \n for (int i = 1; i <= _k; i++) \n { \n for (int j = 1; j <= n; j++) \n { \n int min = 11, minn = -1; \n for (int k = 1; k <= n; k++) \n { \n if (e[j][k] < min && find(j) != find(k) && !book[k]) \n { \n min = e[j][k]; \n minn = k; \n } \n } \n f[find(minn)] = find(j); \n sum += min; \n book[minn] = 1; \n } \n cnt++; \n } \n if (cnt < _k) \n cout << "No Answer"; \n else \n cout << sum; \n return 0; \n} \n为什么错了内容:在给定的代码中,使用了一个for循环来遍历_k次,然后在每次循环中寻找最小的边。但是,当找不到符合条件的边时,会出现问题。在这种情况下,minn的值将保持为-1,并且在f数组中找不到对应的索引,最终导致错误。 \n \n为了解决这个问题,可以在每次循环之前检查是否有符合条件的边。如果没有,则可以输出"No Answer"。 \n \n以下是修改后的代码: \n \ncpp \n#include <iostream> \nusing namespace std; \n \nconst int MAXN = 1000; \nint n, m, k, e[MAXN][MAXN], f[MAXN], book[MAXN]; \n \nint find(int x) { \n if (x == f[x]) \n return x; \n else \n return f[x] = find(f[x]); \n} \n \nint main() { \n cin >> n >> m >> k; \n \n for (int i = 1; i <= n; i++) { \n f[i] = i; \n } \n \n for (int i = 1; i <= n; i++) { \n for (int j = 1; j <= n; j++) { \n e[i][j] = 11; \n if (i == j) \n e[i][j] = 0; \n } \n } \n \n for (int i = 1; i <= m; i++) { \n int x, y, l; \n cin >> x >> y >> l; \n e[x][y] = l; \n e[y][x] = l; \n } \n \n int sum = 0, cnt = 0; \n for (int i = 1; i <= k; i++) { \n int min = 11, minn = -1; \n for (int j = 1; j <= n; j++) { \n for (int k = 1; k <= n; k++) { \n if (e[j][k] < min && find(j) != find(k) && !book[k]) { \n min = e[j][k]; \n minn = k; \n } \n } \n } \n \n if (minn == -1) { \n cout << "No Answer"; \n return 0; \n } \n \n f[find(minn)] = find(minn); \n sum += min; \n book[minn] = 1; \n cnt++; \n } \n \n if (cnt < k) { \n cout << "No Answer"; \n } else { \n cout << sum; \n } \n \n return 0; \n} \n


原文地址: https://www.cveoy.top/t/topic/pD2W 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录