Python 3 Board着色(迭代)

时间:2014-03-05 23:12:40

标签: python

我对Python比较陌生,我有一个问题。我试图选择一个描述我问题的名字,但可能会有更好的名字。现在,这是家庭作业,所以我不想直接回答,而是帮助我自己到达那里。我正在编写一个解决电路板着色问题的程序。我们的想法是填充板,以满足行和列约束。一个例子:

  0 1 3
1[. . x]
2[. x x]
1[. . x]

我写了一个有效的函数,但它没有处理两次查看相同空间([row] [col])的可能性。我知道我应该这么做,所以它只看一次每个空间,但我不知道该怎么做。我确信这是一个简单的解决方案,但我很丢失!

这是我原来的功能。我们的想法是,它将查看每次迭代时具有最大值的列。它可以工作,但它会在同一个空间看两次,在某些情况下导致失败:

def zoomin(rows,cols):
    board = []
    for x in range(len(rows)):
        lyst = []
        for y in range(len(cols)):
            lyst.append(".")
        board.append(lyst)
    for x in range(len(rows)):
        while rows[x] > 0:
              largestColIndex = cols.index(max(cols))        
              print("Current largest Index: ",largestColIndex)
              if cols[largestColIndex] > 0:
                 board[x][largestColIndex] = "x" 
                 rows[x] -= 1
                 cols[largestColIndex] -= 1
    if all([x == 0 for x in rows]) and all([y == 0 for y in cols]):
        return True
    else:
        print("Not Solved")

所以,我试图重写它来迭代从最大值到最小值的列,但现在它根本不起作用:

def zoomin(rows,cols):
    board = []
    for x in range(len(rows)):
        lyst = []
        for y in range(len(cols)):
            lyst.append(".")
        board.append(lyst)
    for x in range(len(rows)):
        while rows[x] > 0:
            sortedIndexes = [i[0] for i in sorted(enumerate(cols), key=lambda x:x[1])]
            for y in reversed(sortedIndexes):
                if cols[y] > 0:
                    board[x][y] = "x"
                    rows[x] -= 1
                    cols[y] -= 1                  
    if all([x == 0 for x in rows]) and all([y == 0 for y in cols]):
        return True   
    else:
        return False

我希望这是有道理的。任何意见,将不胜感激!如果您需要更多说明,请告诉我。

0 个答案:

没有答案