我想生成从(0,0)到(2n,0)的schröder路径,没有高峰,即没有上升步骤,紧接着是下一步。 某些示例适用于n = 3:shröder paths。生成Schröder路径
/被编码为U, - 被编码为R和\被编码为D.这是我的代码来生成这些路径:
public static void addParen(List<String> list, int upstock,int rightstock,int
downstock,bool B, char[] str, int count,int total,int n)
{
if (total == n && downstock == 0)
{
String s = copyvalueof(str);
list.Add(s);
}
if (total > n || (total==n && downstock>0))
return;
else
{
if (upstock > 0 && total<n)
{
str[count] = 'U';
addParen(list, upstock - 1,rightstock, downstock+1,B=true, str, count + 1,total+1,n);
}
if (downstock > 0 && total<n && B==false)
{
str[count] = 'D';
addParen(list, upstock,rightstock, downstock - 1,B=false, str, count + 1,total+1,n);
}
if (rightstock > 0 && total < n)
{
str[count] = 'R';
addParen(list, upstock, rightstock-1, downstock, B = false, str, count + 1, total + 2,n);
}
}
}
public static List<String> generatePaths(int count)
{
char[] str = new char[count * 2];
bool B = false;
List<String> list = new List<String>();
addParen(list, count-1, count, 0,B,str, 0, 0,count*2);
return list;
}
总为2n。我从n-1起始权利和零下降开始。因为没有up但我的bool B是假的(如果出现上涨,那么下跌不能到达它,所以为了防止这种情况,我把B = true,以防止它)如果上涨,那么应该有一个相应的下跌,并且总数应该增加1。如果正确的话,总数应该增加2.我的算法一般是这样工作的,但是我不能在这个实现中得到正确的结果。
欢迎来到StackOverflow。请阅读并遵守帮助文档中的发布准则。在发布您的MCVE代码*和*准确描述问题之前,我们无法为您提供有效帮助。显示给定情况下的所需输出,实际输出以及调试跟踪的结果。 – Prune