【并查集】判断是否为树

【问题描述】

树是一种大家都不陌生的数据结构,它有可能是一颗空树或是一些满足要求的节点连接而成的有向边的集合。

一棵树只有一个根节点,根节点没有指向它的边。

除了根节点的每一个节点都只有一条边指向它。

出现环的图都不是树。

对一些节点连接而成的有向边的集合进行判定,判定每一组的输入数据构成的图是否是一棵树。

【输入】

每输入一对都为0的数时,表示一组数据输入完毕。每条边由一对正整数表示,第一个数为有向边的起始点,第二个数为有向边的终止点。一对负数的输入表示输入的结束。

【输出】

每组测试数据输出一行判定结果,若输入的图为树,则输出“Case k is a tree.”,否则输出“Case k is not a tree.”。其中k表示每组数据的编号(编号从1开始)。

【解题报告】

运用并查集可以判定一个图是否为树。

根据树的定义与特点,需考虑的情况有:

(1)树中节点至多只能有一个父节点;

(2)树中不能出现环;

(3)构成的图只能有一个根节点,否则构成的将是森林而不是一棵树。

通过观察输入输出可知,题中编号是随即的,所以在编程中要对出现的点标记才能判断。

Step1:对每对输入的根节点标记表示这些节点出现过,进行并操作。并操作时两个节点不能有相同的根节点否则将构成环;假设b节点要接到a上,则要保证b节点是一个根节点,否则若进行并操作,b将会有两个父节点;若无以上情况,则可以合并两棵树。

Step 2:每组数据输入结束后&#

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值