在C ++中找到2 D网格中长度为L的所有路径

时间:2015-11-15 05:29:05

标签: c++ algorithm

我试图通过递归调用route(string s)并附加到stringth来找到2-D网格中的所有长度为L的路径(暂时忘记边界)。 'l'代表左 'r'代表权利 'd'代表下来 和 '你'代表

我认为我的逻辑是正确的。我需要用这些值递归调用route(string s)并附加到s。

我可以看到代码中的缺陷,但却无法想出纠正它的方法。我通过在每次调用时附加'r','l','u'或'd'来改变字符串s的值,但由于后续调用在同一范围内,我得到垃圾答案而不是你的排列,l,d,r,我期待。

#include <iostream>
#include <vector>

using namespace std;

void route(string s, int k);

int main(void){
    string result="";
    route("",5);
}

void route(string initial, int k){
    if(initial.length()>5){
        cout<<initial<<endl;
        cout<<"Length of initial:"<<initial.length();
        return;
    }
    for(int i=0;i<4;i++){
        switch(i){
        case 0:
            {
            initial.append("r");
            route(initial);
            }       
        case 1:
            {
            initial.append("l");
            route(initial);
            }
        case 2:
            {
            initial.append("u");
            route(initial);
            }
        case 3:
            {
            initial.append("d");
            route(initial);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

无需更改initial,只需将新字符串传递给路由即可。 e.g。

route(initial + "u",k-1);

请注意,您目前没有使用k值,而且您也没有针对rl案例进行递归。

还有一件事 - 一个for循环,每个不同的情况都有一个开关,是一个奇怪的结构。为什么不一个接一个地调用4个不同的选项呢?

route(initial + "l",k-1);
route(initial + "r",k-1);
route(initial + "u",k-1);
route(initial + "d",k-1);