查并集

 查并集笔记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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值