文章

3

粉丝

0

获赞

3

访问

73

头像
Freckles C语言+kruskal+并查集
P1183 北京大学上机题
发布于2026年3月29日 20:37
阅读数 28


#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#define M 105
#define INF 1e12
typedef struct node {
	double x;
	double y;
}Node;

typedef struct edge {
	int v1;//v1,v2节点下标
	int v2;
	double dist;
}Edge;

Node list_node[M];
Edge list_edge[M * (M - 1) / 2];
//int visited[M];
int arr[M];//查并集的集
double calc_dist(Node a, Node b) {//计算距离
	double dx = a.x - b.x;
	double dy = a.y - b.y;
	return sqrt(dx * dx + dy * dy);
}
int cmp(const void* a, const void* b) {
	Edge* pa = (Edge*)a;
	Edge* pb = (Edge*)b;
	if (pa->dist > pb->dist)return 1;
	else return -1;
}
int find(int x) {
	if (x != arr[x]) {
		int t = find(arr[x]);
		arr[x] = t;
		return t;
	}
	return x;
}
double find_merge(Edge p) {
	int v1 = find(p.v1);
	int v2 = find(p.v2);
	if (v1 == v2)return 0;
	arr[v2] = v1;
	return p.dist;
}

int main() {

	int n;
	while (scanf("%d", &n) != EOF && n != 0) {
		//1、获取所有节点
		...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发