并查集用法一例

来源:互联网 发布:淘宝有好货怎么参加 编辑:程序博客网 时间:2024/05/01 09:55

题目:有一个相似属性列表,每一行有一些属性,属性间"\t"分割。若某两行有一个属性相同,则认为他们都相似,要求将其合并。比如相似属性表:

生日 出生日期 出生日

身高 身长

出生年月日 出生时间 出生日期

我们要做的是合并为 “生日 出生日期出生日期 出生年月日出生时间”


code如下:

#!/usr/bin/env python#!-*- coding:utf-8 -*-#!vim: set ts=8 sw=8 sts=8 tw=100 noet:# ***************************************************************************# # # $Id$ # # **************************************************************************/ import osimport sys node_father={}output_dict={}def find_father(item):while node_father.has_key(item):item=node_father[item]return itemfor line in sys.stdin:lin=line.strip().split('\t')if len(lin)!=2:continueitem1=lin[0]item2=lin[1]f_item1=find_father(item1)f_item2=find_father(item2)if f_item1==f_item2:continueelse:node_father[f_item1]=f_item2if not output_dict.has_key(f_item2):output_dict[f_item2]=[]if f_item1 not in output_dict[f_item2]:output_dict[f_item2].append(f_item1)if output_dict.has_key(f_item1):for item in output_dict[f_item1]:if item not in output_dict[f_item2]:output_dict[f_item2].append(item)output_dict[f_item1]=[]for item in output_dict:output=itemif output_dict[item]:for key in output_dict[item]:output+="\t"+keyprint output


原创粉丝点击