#include<iostream> #include<algorithm> typedef struct { int value; int node1,node2; }edge; #define max_size 20 int parent[20]; using namespace std; int rule(edge a,edge b) { return a.value<b.value; } int find_root(int v) { if(parent[v]==-1) return v; else { parent[v]=find_root(parent[v]); return parent[v]; } } int is_cycle(int v1,int v2) { int v1_root=find_root(v1); int v2_root=find_root(v2); if(v1_root==v2_root) return 1; else { parent[v1_root]=v2_root; return 0; } } void kruskal(edge a[],edge b[],int n,int m) { sort(a,a+m,rule); for(int i=0,j=0;i<m;i++) { if(!is_cycle(a[i].node1,a[i].node2)) { b[j].node1=a[i].node1; b[j].node2=a[i].node2; b[j].value=a[i].value;; j++; if(j==n-1) break; } } } int main() { for(int i=0;i<20;i++) { parent[i]=-1; } int n,m; cin>>n>>m; edge arr[m]; for(int i=0;i<m;i++) { cin>>arr[i].node1>>arr[i].node2>>arr[i].value; } edge mst[n]; kruskal(arr,mst,n,m); cout<<endl; for(int i=0;i<n-1;i++) { cout<<mst[i].node1<<' '<<mst[i].node2<<' '<<mst[i].value<<endl; } return 0; }改成c语言
时间: 2024-03-12 13:46:52 浏览: 43
把iostream头文件去掉,将using namespace std; 去掉,修改 cin 和 cout 为 scanf 和 printf。
同时,C语言中没有 typedef struct 的用法,需要将结构体定义和类型定义分开写。代码如下:
```c
#include<stdio.h>
#include<algorithm>
struct Edge {
int value;
int node1,node2;
};
#define max_size 20
int parent[20];
int rule(struct Edge a,struct Edge b) {
return a.value<b.value;
}
int find_root(int v) {
if(parent[v]==-1) return v;
else {
parent[v]=find_root(parent[v]);
return parent[v];
}
}
int is_cycle(int v1,int v2) {
int v1_root=find_root(v1);
int v2_root=find_root(v2);
if(v1_root==v2_root) return 1;
else {
parent[v1_root]=v2_root;
return 0;
}
}
void kruskal(struct Edge a[],struct Edge b[],int n,int m) {
std::sort(a,a+m,rule);
for(int i=0,j=0;i<m;i++) {
if(!is_cycle(a[i].node1,a[i].node2)) {
b[j].node1=a[i].node1;
b[j].node2=a[i].node2;
b[j].value=a[i].value;;
j++;
if(j==n-1) break;
}
}
}
int main() {
for(int i=0;i<20;i++) {
parent[i]=-1;
}
int n,m;
scanf("%d %d",&n,&m);
struct Edge arr[m];
for(int i=0;i<m;i++) {
scanf("%d %d %d",&arr[i].node1,&arr[i].node2,&arr[i].value);
}
struct Edge mst[n];
kruskal(arr,mst,n,m);
printf("\n");
for(int i=0;i<n-1;i++) {
printf("%d %d %d\n",mst[i].node1,mst[i].node2,mst[i].value);
}
return 0;
}
```
阅读全文