这是原来的正确代码:
#include <iostream>
#include <algorithm>
#include <fstream>
using namespace std;
#define MAXVEX 100
struct Edge {
int begin;
int end;
int weight;
};
Edge edges[MAXVEX];
char map[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'};
bool cmp(Edge a, Edge b) {
return a.weight < b.weight;
}
int Find(int *parent, int f) {
while (parent[f] > 0)
f = parent[f];
return f;
}
void Kruskal(Edge edges[], int n, int m) {
int sum = 0;
int i,nn,mm;
int parent[MAXVEX];
for (i = 0; i < n; ++i) {
parent[i] = 0;
}
for (i = 0; i < m; ++i) {
nn = Find(parent, edges[i].begin);
mm = Find(parent, edges[i].end);
if (nn != mm) {
parent[nn] = mm;
cout << map[edges[i].begin] << "->" << map[edges[i].end] << "=" << edges[i].weight << endl;
sum += edges[i].weight;
}
}
cout << "Minimum weight sum: " << sum << endl;
}
int main() {
int i,n,m,begin,end,weight;
cin >> n >> m;
for (i = 0; i < m; ++i) {
cin >> begin >> end >> weight;
edges[i].begin = begin;
edges[i].end = end;
edges[i].weight = weight;
}
sort(edges, edges + m, cmp);
Kruskal(edges, n, m);
return 0;
}
这是我把排序方法改为快速排序后的代码:
#include <iostream>
#include <algorithm>
#include <fstream>
using namespace std;
#define MAXVEX 100
struct Edge
{
int begin;
int end;
int weight;//权重
};
Edge edges[MAXVEX];
char map[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'};
void swap(int *a,int *b)
{
int t=*a;
*a=*b;
*b=t;
return;
}
void Qsort(int a,int b)
{
int i,j;
if(a<b)
{
i=a+1;
j=b;
while(i<j)
{
if(edges[i].weight>edges[a].weight)
{
swap(&edges[i].weight,&edges[j].weight);
j--;
}
else
{
i++;
}
}
if(edges[i].weight>edges[a].weight)
{
i--;
}
swap(&edges[i].weight,&edges[a].weight);
Qsort(a,i);
Qsort(j,b);
}
}
int Find(int *parent, int f)
{
while (parent[f] > 0)
f = parent[f];
return f;
}
void Kruskal(int n, int m)
{
int sum = 0;
int i,nn,mm;
int parent[MAXVEX];
for (i = 0; i < n; ++i)
{
parent[i] = 0;
}
for (i = 0; i < m; ++i)
{
nn = Find(parent, edges[i].begin);
mm = Find(parent, edges[i].end);
if (nn != mm)
{
parent[nn] = mm;
cout << map[edges[i].begin] << "->" << map[edges[i].end] << "=" << edges[i].weight << endl;
sum += edges[i].weight;
}
}
cout << "Minimum weight sum: " << sum << endl;
}
int main()
{
int i,n,m,begin,end,weight;
cin >> n >> m;
for (i = 0; i < m; ++i)
{
cin >> begin >> end >> weight;
edges[i].begin = begin;
edges[i].end = end;
edges[i].weight = weight;
}
Qsort(0,m-1);
Kruskal(n, m);
return 0;
}
我修改后就运行不出结果了,一直找不到错误在哪里,求大佬帮忙解答一下!