Python(AI 约束满足问题) 在矩形地面上铺设方形和/或矩形(2D)瓷砖

我需要使用Python程序中的AI算法来安排和/或将2D瓷砖铺设到一个2D的正方形或矩形平面上。每个瓷砖都有长度和宽度。例如,如果一个平面是4×3,并且一组瓷砖是

S={(2,3),(1,2),(2,2)}

这些瓷砖可以旋转90度以适应矩阵。

输入第一行包含平面的长度和宽度,第二行是瓷砖的数量,然后是后续瓷砖的长度和宽度

但输入应以制表符分隔

例如

4    332    31    22    2

输出例如

1    1    2   21    1    3   31    1    3   3

我解决这个问题时遇到了困难,因为我只能使用Python的标准库,不能使用NumPy和CSP库

~编辑 2`到目前为止我的代码,我不知道如何在没有CSP库的情况下添加算法或生成网格

from sys import stdina = stdin.readline()x = a.split()rectangular_plane = [[0] * int(x[0]) for i in range(int(x[1]))]num_of_rectangles = stdin.readline()r_widths = []r_lengths= []for l in range(int(num_of_rectangles)):    b = stdin.readline()    y = b.split()r_lengths.insert(l,y[0])r_widths.insert(l,y[1])

回答:

我已经使用回溯方法解决了这个问题,并且没有使用任何非标准模块。

尝试在线运行!

import sysnums = list(map(int, sys.stdin.read().split()))pw, ph = nums[0:2]ts = list(zip(nums[3::2], nums[4::2]))assert len(ts) == nums[2]if sum([e[0] * e[1] for e in ts]) != pw * ph:    print('Not possible!')else:    def Solve(*, it = 0, p = None):        if p is None:            p = [[0] * pw for i in range(ph)]        if it >= len(ts):            for e0 in p:                for e1 in e0:                    print(e1, end = ' ')                print()            return True        for tw, th in [(ts[it][0], ts[it][1]), (ts[it][1], ts[it][0])]:            zw = [0] * tw            ow = [it + 1] * tw            for i in range(ph - th + 1):                for j in range(pw - tw + 1):                    if all(p[k][j : j + tw] == zw for k in range(i, i + th)):                        for k in range(i, i + th):                            p[k][j : j + tw] = ow                        if Solve(it = it + 1, p = p):                            return True                        for k in range(i, i + th):                            p[k][j : j + tw] = zw        return False    if not Solve():        print('Not possible!')

示例输入:

4 332 31 22 2

输出:

1 1 2 21 1 3 31 1 3 3

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注