day26 七段码

【问题描述】

小蓝要用七段码数码管来表示一种特殊的文字。

上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二极管,分别标记为 a, b, c, d, e, f, g。
小蓝要选择一部分二极管(至少要有一个)发光来表达字符。
在设计字符的表达时,要求所有发光的二极管是连成一片的。

	例如:b 发光,其他二极管不发光可以用来表达一种字符。
	例如:c 发光,其他二极管不发光可以用来表达一种字符。
	这种方案与上一行的方案可以用来表示不同的字符,尽管看上去比较相似。
	例如:a, b, c, d, e 发光,f, g 不发光可以用来表达一种字符。
	例如:b, f 发光,其他二极管不发光则不能用来表达一种字符,因为发光的二极管没有连成一片。

请问,小蓝可以用七段码数码管表达多少种不同的字符?

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

解题:并查集+深搜

(答案不对但看不出哪错了)

from string import ascii_letters
from itertools import combinations
from collections import deque


class UF:
    def __init__(self, count, ori: tuple):
        self.res = 0
        self.count = count
        self.lst = []
        self.deque = deque(ori)
        self.parent = {
     
            'a': ['b', 'f'],
            'b': ['a', 'g', 'c'],
            'c': ['b', 'd', 'g'],
            'd': ['c', 'd'],
            'e': ['d', 'f', 'g'],
            'f': ['a', 'e', 'g'],
            'g': ['b', 'c', 'e', 'f']
        }

    def union(self, x):
        if self.lst:
            for node in self.lst:
                if x in self.parent[node]:
                    self.lst.append(x)
                    return True
            else:
                return False
        else:
            self.lst.append(x)
            return True

    def func(self):
        length = self.count
        while True:
            count = 0
            while count < length:
                x = self.deque.popleft()
                if self.union(x):
                    pass
                else:
                    self.deque.append(x)
                count += 1
            if length == len(self.deque):
                break
            else:
                length = len(self.deque)
            if not self.deque:
                break
        if len(self.deque) == 0:
            return True


if __name__ == '__main__':
    str_lst = list(ascii_letters[:7])
    count = 0
    for i in range(1, 8):
        for choice in combinations(str_lst, i):
            uf = UF(i, choice)
            if uf.func():
                count += 1
        print(i, count)
    print(count)

你可能感兴趣的:(蓝桥杯)