计算给定情况的路径

时间:2016-11-11 14:17:09

标签: python

我有一个问题,我们被要求编写一个python函数来计算路径数。问题是这样的:

机器人位于 3x7 网格的左上角。机器人只能在任何时间点向下移动一个方格向右移动一个方格,并且不能向任何其他方向移动。机器人正试图到达网格的右下角。

编写一个python函数, countPaths ,它返回一个表(列表列表),路径。表格路径中的每个项目是机器人可以从开始位置到与表格中的项目对应的位置可能采用的路径数。例如,路径[0] [0] = 1且路径[2] [6] = 28。 enter image description here

这是我试过的东西,但它需要一些修正。我对python很新,我需要一些帮助来纠正代码。

def countPaths(row,column):
    row = 1
    column = 1
    for row in range(1,n):
        for column in range(1,n):
            (n_row-1 + n_column-1)
    return paths

3 个答案:

答案 0 :(得分:1)

您的代码有一些好主意,但您没有正确实现它们。在添加两个数组值以获取新数组值方面是正确的,并且您正确使用两个嵌套的startID = Nz(DLookup("[Sandwich Order ID]", "Sandwich Orders", "[Order Number] = " & Nz(Me!Order_Number.Value, 0)), 0) 循环。但是,您在函数内的前两行中覆盖enum Play { case rock, paper, scissors enum PlayResult { case aBeatsB, bBeatsA, tie } func beats(_ other: Play) -> Bool { switch (self, other) { case (.rock, .scissors): return true case (.scissors, .paper): return true case (.paper, .rock): return true default: // other cases are either ties or loses return false } } func resultOfGame(against other: Play) -> PlayResult { if (self.beats(other)) { return .aBeatsB } else if (other.beats(self)) { return .bBeatsA } else { return .tie } } } func printGame(_ a: Play, against b: Play) { switch a.resultOfGame(against: b) { case .aBeatsB: print("\(a) beats \(b)") case .bBeatsA: print("\(b) beats \(a)") case .tie: print("\(a) vs. \(b) is a tie") } } printGame(.rock, against: .scissors) printGame(.paper, against: .paper) for的值,并尝试使用从未定义的row。您也不能正确访问数组的先前值。最后,您没有考虑左列和顶行不一起添加值但只是值col这一事实。

这是有效的代码。如果您需要对其任何部分进行解释,请告诉我。

n

打印

1

答案 1 :(得分:0)

数学公式: 为了达到元素[x] [y],机器人需要进行x + y移动。所以他有x + y选择x选项将他的x步分配到他的x + y移动上。

因此路径[x] [y] =(x + y)!/(x!+ y!)

以下是python实现:

from math import factorial as fac
def countPaths():
    noRows=3
    noCols=7
    paths=[]
    for row in range(0,noRows):
        #uncomment to see how the list of lists is build
        #print(paths)
        paths.append([])
        for col in range(0,noCols):
            paths[row].append( int( fac(row+col)/fac(row)/fac(col)))
    return paths

paths=countPaths()
print('\n\nresult:')
print(paths)

<强>结果:

result:
[[1, 1, 1, 1, 1, 1, 1], [1, 2, 3, 4, 5, 6, 7], [1, 3, 6, 10, 15, 21, 28]]

只需使用print命令即可跟踪变量的内容。

答案 2 :(得分:0)

这是一个递归实现:

rowLength = 3
colLength = 7
count = 0
path = []
paths = []

def countPaths(row,col):
    global count
    global path
    global paths

    if (row,col) in path:
        return
    else:
        path.append((row,col))    

    if row == rowLength and col == colLength:
        count += 1
        print ("Reached end, Path followed: ",path)
        paths.append(path)
        path.pop()
        return
    if row > rowLength or col > colLength:
        path.pop()
        return

    # Go down
    countPaths(row+1, col)

    # Go right
    countPaths(row, col+1)

    path.pop()
    return

countPaths(0,0)