最近看到了這么一道題,覺得很有意思,所以就來給大家分享一下:
對於下面這個圖形: 每個正方形的邊長為1, 那么從A到Z的最短路徑條數有多少?
這道題的解法有下面的兩種。
第一種(規律):
首先,我們可以肯定的是:最短路徑為6.
考慮將這個矩形補全,那么從A到Z,需要做的就是從左往右走四步,從上往下走兩步。這個是剛好可以滿足條件的。 我們只需要從這6步中選出兩步是朝下的即可,那么剩下的4步朝右的也就隨之確定了。 所以,C(2, 6),但是這里並不是完整的,而缺少的那兩個朝下的,可以發現, 剛好每個對應着一個路徑,所以最終就是 C(2, 6) - 2。
第二種(動態規划):
我這里粗略的畫了一下:
即根據圖形特點建立坐標軸,我們設 d[x, y] 為從A點出發到(x, y)左邊處時,最短需要走的步數。
顯然,到(1, 0)為1, 到(2, 0)為2, 到(3, 0)為3。 到(0, 1)為1, 到(1, 1)為2,即我們可以先向右走,然后再向下走;也可以先向下走,然后再向右走,就是這兩種,如下:
其實,我們根據規律就可以得到下面的狀態轉移方程:
d[x, y] = d[x - 1, y] + d[x, y - 1];
這里其實也是很好理解的,到d[x, y]就是到達x,y 這個點的最短路徑的條數。
到這一步有兩種方法,一種是最后一步在 (x - 1, y) 這點,另一種就是到達 (x, y - 1)這一點, 所以到達(x, y)這點一共就這兩種可能,相加即可 ,即 d[x - 1, y] + d[x, y - 1]。