查并集笔记1
没有考虑到路径
大概是这个样子吧
/*查并集 没有考虑到路径*/
#inclued <stdio.h>
#include <stdlib.h>
#defind ve 6
void initialise(int parent[])
{
int i;
for(i=0;i<ve;i++)
{
parent[i] = -1; // 假设 -1 为源
}
}
int find_root(int x,int par[])
{
int x_root = x;
while(par[x_root] != -1) //一直找到根节点 root
{
x_root=par[x_root];
}
return x_root;
}
/*1-有环 0-无环*/
int union_vertices(int x,int y,int par[])
{
int x_root = find_root(x,par);
int y_root = find_root(y,par);
if(x_root == y_root)
{
return 0;
}
else
{
par[x_root]=y_root; //X父节点设置成Y
return 1;
}
}
/*查并集 没有考虑到路径*/
int main()
{
int par[ve]={0};
int edges[6][2]={
{0,1},{1,2},{2,5},{1,3},{3,4},{2,4}
}
initialise(par);
int i;
for(i=0;i<6;i++)
{
int x=edges[i][0];
int y=edges[i][1];
if(union_vertices(x,y,par)==0)
{
printf("有环\n");
exit(0);
}
}
printf("无环\n");
return 0;
}