Я хочу генерировать дорожки schröder от (0, 0) до (2n, 0) с без пиков, т. Е. Без шага, следующего за шагом вниз. Некоторые примеры приведены для n = 3: shröder paths.Создание путей Шредера
/кодируется как 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 ups n прав и ноль downs.Since нет Up еще мой bool B является ложным (если приходит вверх, то вниз не может прийти после него, поэтому, чтобы предотвратить это, я положил B = true, который предотвращает это .) Если приходит всплывающее окно, то должно быть соответствующее уменьшение, а сумма должна быть увеличена на единицу. Если это так, то сумма должна быть увеличена на 2. Мой алгоритм в целом работает так, но я не смог получить правильный результат с этой реализацией.
Добро пожаловать в StackOverflow. Прочтите и следуйте инструкциям по отправке в справочной документации. Мы не можем эффективно помочь вам, пока вы не разместите свой код MCVE * и * точно не опишите проблему. Покажите желаемый результат для данной ситуации, фактический вывод и результаты ваших отладочных трасс. – Prune