走格子问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了走格子问题相关的知识,希望对你有一定的参考价值。

转载:http://blog.csdn.net/moses1213/article/details/52164248

6×9的的方格中,起点的左下角,终点在右上角,从起点到终点,只能从下向上,从左向右走,问一共有多少种不同的走法。
A.  4200
B.   5005
C.  1005

D.  以上都不正确

这原本是道选择题,答案选B。已选择题的思路的来解决这道问题,假设左下角坐标为(0,0),那么右上角坐标为(6,9)。从左下角走到右上角,横向要走9步,纵向走6步,不管采用哪种方式横向和纵向走的步数和是不变的,不同走法的差异在与总共15步中横向9步放在那些步数序列上,所以总共有15选9种走法。

 

下面用程序解决这个问题:因为只能从下到上,从左到右。所以第一步有两种走法,向上走一步到(0,1),或者向右走一步到(1,0),在(0,1)位置又有两种走法,实际上这与原问题区别只是起始坐标不同,递归解决。递归的终止条件是什么?这是一定要想清楚的,想象走到倒数第二步了,也就是(5,9)或者(6,8)的位置上,这时候就只有一种走法了,返回1。但是递归函数会超过网格的边界,返回0.

 

[cpp] view plain copy
 
    1. <span style="font-size:12px;">#include <iostream>  
    2. using namespace std;  
    3.    
    4. int Steps(int x, int y)  
    5. {  
    6.     if(x > 9 || y > 6)  
    7.         return 0;  
    8.     if(x == 8 && y == 6)  
    9.         return 1;  
    10.     if(x == 9 && y == 5)  
    11.         return 1;  
    12.    
    13.     return Steps(x+1, y) + Steps(x, y+1);  
    14. }  
    15.    
    16. int main() {  
    17.     // your code goes here  
    18.     cout << Steps(0,0) << endl;  
    19.     return 0;  
    20. }</span>  

以上是关于走格子问题的主要内容,如果未能解决你的问题,请参考以下文章

算法笔记_135:格子取数问题(Java)

走格子

51nod走格子

51Nod 1344 走格子(贪心

51nod 1344 走格子(水题+贪心)

51nod 1344 走格子贪心/前缀和