填充矩阵的算法

时间:2015-04-10 13:09:45

标签: algorithm python-3.x matrix

我需要一些帮助来解决这个问题。我需要写一个填充剧院座位的功能。 例如,我们有这个剧院:

theater = [ [1, 1, 1, 0], # 1 row

            [1, 0, 1, 0], # 2 row

            [0, 0, 0, 0], # 3 row
          ]

我们必须从行的开头填补席位 首先,我们必须填充最少的座位 如果我们有两排相同数量的填充座位,我们将填充一个行号较小的行(如果第3行与第3行填充的座位数相同,则必须填写第2行)。
最后,我们必须填补,直到所有座位都填满。 空座位为0,填充空座位为1。 结果必须是元组列表 - 第一个元素是行号,第二个元素是列号 - (2,1) - 第2行和第1列。

示例:

theater = [ [1, 1, 1],
           [1, 0, 0],
           [1, 0, 0],
           [1, 1, 0] ]

expected = [(4, 3), (2, 2), (2, 3), (3, 2), (3, 3)]

2 个答案:

答案 0 :(得分:0)

没有人会告诉你非常初步的事情。

我可以沿着正确的路线发送给您。查找如何定义二维数组。为行和列创建2个变量。从0,0开始行和列。继续增加列,直到它等于一行中的最大座位,将其设置为零并增加行。

如何在python enter link description here

中定义二维数组

答案 1 :(得分:0)

这个想法是:

  • 首先确定剧院空座位
  • 然后反向清空列表
  • 然后过滤空列表检查上排空座位长度等于
  • 当前行空座位与上排空座位置相同的位置然后将其添加到临时列表中并重复下一行上一行
  • 然后你得到你的最终结果

通过这个程序这段代码:

theater = [ [1, 1, 1],
           [1, 0, 0],
           [1, 0, 0],
           [1, 1, 0] ]

empty = [[(i+1 ,j+1) for j in range(len(theater[i])) if theater[i][j] == 0]  for i in range(len(theater)) ]
empty = empty[::-1]
#print empty

final_result = []
for i in range(len(empty)):
    result = []
    if i != len(empty)-1 and empty[i] not in final_result:
        j = i+1
        while len(empty[i]) == len(empty[j]):
            flag = False
            for first, second in zip(empty[i], empty[j]):
                if first[1] != second[1]:
                    flag = True
                    break
            if flag:
                break
            else:
                result.insert(0, empty[j])
                j = j+1
                if j == len(empty):
                    break


        for rr in result:
            final_result.append(rr)
        final_result.append(empty[i])

    if empty[i] not in final_result:
        final_result.append(reversed(empty[i]))


expected = []
for i in final_result:
    expected.extend(i)

print expected

输出:

[(4, 3), (2, 2), (2, 3), (3, 2), (3, 3)]