数据结构方面,你了解并查集么?
上交05年计算机复试 上机 畅通工程问题:
例题1 修路连通问题 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?
本质可以理解成图论的连通分支 个数问题,只有一个连通分支,那么 点点互通,两个连通分支,那么需要一条路,。。。。。。
如果用计算机编程实现的话,可能有回路,很多节点,很多边,如何实现呢?那么就引出了并查集!
并查集由一个整数型的数组和两个函数构成。数组father[ ]记录每个点的前导点,函数 find 查找根节点,mix 合并。
- int father[ ] 数组,记录上级领导。//分别记录了n个节点中,每一个点所在集群(连通分支)的上一级节点,每个节点需要一层层查询自己的根节点来判断自己所在的族群。直到某节点的上个节点是自己,那么他是本族群的根节点。
- find 函数,返回大长老。就是通过 father【】数组记录的上层领导,来一层层查找本族群的大