我试图通过递归调用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);
}
}
}
}
答案 0 :(得分:0)
无需更改initial
,只需将新字符串传递给路由即可。 e.g。
route(initial + "u",k-1);
请注意,您目前没有使用k
值,而且您也没有针对r
和l
案例进行递归。
还有一件事 - 一个for循环,每个不同的情况都有一个开关,是一个奇怪的结构。为什么不一个接一个地调用4个不同的选项呢?
route(initial + "l",k-1);
route(initial + "r",k-1);
route(initial + "u",k-1);
route(initial + "d",k-1);