七巧板涂色算法(Python)

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


测试:结果

[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++版)
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值