//第1行给出评估的道路条数 N、村庄数目M(< 100);随后的 N
#include<iostream>
#include<algorithm>
using namespace std;
int f[101];
int find1(int x) {
int t = x;
while (f[t] != t) { t = f[t]; }
return t;
}
struct road{
int a = 0, b = 0, distance = 0;
};
bool cmp(road x, road y) {
return x.distance < y.distance;
}
void merge2(int fa,int fb) {
f[fa] = fb;
}
int main() {
int N = 0, M = 0;
bool flag=1;
while (cin >> N >> M){
if (N == 0)break;
if (N < M - 1) { flag = 0; break; }
road *r = new road [N+1];
int count = 0;
while (N--) { count++;
cin >> r[count].a >> r[count].b >> r[count].distance;
}
for (int i = 1; i <= M; i++) {
f[i] = i;
}
sort((r + 1), (r + N + 1), cmp);
int sum = 0,ans=0;
for (int i = 1; i <= N; i++) {
int fa = find1(r[i].a);
int fb = find1(r[i].b);
if (fa == fb) continue;
merge2(fa,fb);
ans++;
sum += r[i].distance;
}
delete [] r;
if (ans == M - 1)flag = 1;
else flag = 0;
if (flag) { cout << sum << endl; }
else { cout << "?" << endl; }
}
}

在上一个代码中也用了sort函数 其中也是用了动态数组,也是sort(r+1,r+(一个输入的变量)M+1,cmp)但是那个代码就没有报错,但是这里的运行的时候报错了(1、这是为什么)然后说触发了断点,转到了2、截图中的注释,那个看不懂,有解释一下吗。
1、为什么运行的时候报错了
2、截图中的注释,那个看不懂,可以麻烦解释一下吗(或者说指点一下哪里有相关的文章博客之类的)。