欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

七巧板涂色算法(Python)

程序员文章站 2022-03-03 11:21:30
...

描述:有如图所示的七巧板,试编写算法,使用至多4种不同颜色对七巧板进行涂色(每块七巧板一种颜色),要求相邻区域的颜色互不相同,打印输出所有可能的涂色方案。

七巧板涂色算法(Python)

测试:结果

[1, 2, 1, 3, 2, 1, 4]

[1, 2, 1, 3, 2, 4, 4]

...

[4, 3, 4, 2, 3, 1, 1]
[4, 3, 4, 2, 3, 4, 1]
产生的总次数:672


class A:
    def __init__(self, sum = 0):
        self.sum = sum

    def add(self):
        self.sum = self.sum + 1

    def print(self):
        print("产生的总次数:{}".format(self.sum))

#检查第i块七巧板放第j种颜色是否冲突
def check(i,j):
    for k in range(0,i):
        #第i块和第k块七巧板相连,且第k块颜色为第j种颜色
        if (1==data[i][k] and v[k] == j):
            return False
        k = k+1
    return True

sum = A()
def printSolution():
    print(v)
    sum.add()

def search(i):
    if i == 7:
        printSolution()
    else:
        for j in range(1,5):
            if(check(i,j)):
                v.append(j)
                search(i+1)
                v.pop()

v = []
data=[[0,1,0,0,1,0,1],[1,0,0,1,0,1,0],[0,0,0,1,0,0,1],[0,1,1,0,0,1,1],
[1,0,0,0,0,0,1],[0,1,0,1,0,0,0],[1,0,1,1,1,0,0]]

if __name__ == '__main__':
    search(0)
    sum.print()
参考自七巧板设计算法(C++版)