扶我起来我还能敲几行 2021-04-17 22:20 采纳率: 100%
浏览 27

(Kruskal算法)为什么换了个排序方法就运行不出结果了,求解答

这是原来的正确代码:

#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;
}

我修改后就运行不出结果了,一直找不到错误在哪里,求大佬帮忙解答一下!

  • 写回答

1条回答 默认 最新

  • 关注

    有没有大佬救命啊

    评论

报告相同问题?

悬赏问题

  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价