并查集用法一例

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

生日 出生日期 出生日

身高 身长

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

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


code如下:

#!/usr/bin/env python
#!-*- coding:utf-8 -*-
#!vim: set ts=8 sw=8 sts=8 tw=100 noet:
# ***************************************************************************
# 
# 
# $Id$ 
# 
# **************************************************************************/
 
import os
import sys
 


node_father={}
output_dict={}
def find_father(item):
	while node_father.has_key(item):
		item=node_father[item]
	return item
for line in sys.stdin:
	lin=line.strip().split('\t')
	if len(lin)!=2:
		continue
	item1=lin[0]
	item2=lin[1]
	f_item1=find_father(item1)
	f_item2=find_father(item2)
	if f_item1==f_item2:
		continue
	else:
		node_father[f_item1]=f_item2
		if 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=item
	if output_dict[item]:
		for key in output_dict[item]:
			output+="\t"+key
		print output


你可能感兴趣的:(笔试面试题)