Как мне решить эту игру в домино, используя рекурсию на C#?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как мне решить эту игру в домино, используя рекурсию на C#?

Сообщение Anonymous »

Я пробовал обновить свой код до этой версии, но все равно не работает:
using System;

namespace RecursiveDomino
{
class Program
{
static void Main()
{
int n = Convert.ToInt32(Console.ReadLine());
bool[] used = new bool[n];
string[] pairList = new string[n];
for (int i = 0; i < n; i++)
{
pairList = Console.ReadLine();
}

int x = Convert.ToInt32(Console.ReadLine());
List results;
results = DominoChains(pairList, x, used);
foreach (string s in results)
{
Console.WriteLine(s);
}
}

static List DominoChains(string[] lista, int x, bool[] used)
{
if (x == 1)
{
List results = new List();
for (int i = 0; i < lista.Length; i++)
{
if (!used)
{
results.Add(lista);
}
}

return results;
}

List finalChains = new List();
List temporaryChains = DominoChains(lista, x - 1, used);
for (int i = 0; i < temporaryChains.Count; i++)
{
for (int j = 0; j < lista.Length; j++)
{
if ((!used[j] && temporaryChains[temporaryChains.Length - 1] == lista[j][0]) || temporaryChains.Count == 0)
{
temporaryChains.Add(lista[j]);
if (temporaryChains.Count == x)
{
finalChains.AddRange(temporaryChains);
}
else { DominoChains(lista, x - 1, used); }
}
}
}

return finalChains;
}
}
}

I have a recursion problem where I have to input into console the following data:

On the first line a natural number equal with the number of tiles I have to input on the following lines (in my example the first number is 6).
On the following lines the domino tiles in the following order:
```lang-none
1 2

1 3

3 4

2 3

3 5

4 5

В последней строке другое число, обозначающее количество плиток, которые необходимо вернуть в каждой отдельной строке (в моем примере это число равно 3).

С помощью этих данных мне нужно отобразить все возможные комбинации пар. Для каждой отдельной строки число второе число из первой пары должно быть равно первому числу следующей пары и так далее. У меня была подсказка для этого задания, где мне нужно объявить промежуточный список, равный функции (используя рекурсию с самого начала), но когда я пытаюсь запустить код, он выдает мне нулевое исключение для intermediaryList.
Также я должен упомянуть, что мне разрешено использовать просто «using System;» Не разрешается использовать что-либо еще.
Пример:
6
1 2
1 3
3 4
2 3
3 5
4 5
3
В консоли отобразится:
1 2 2 3 3 4
1 2 2 3 3 5
1 3 3 4 4 5
2 3 3 4 4 5
I нужно показать все возможные комбинации, и если я не смогу их найти, будет показано N/A.
У меня есть несколько проблем: я понял, что базовый вариант завершает мою рекурсию. неправильно, он всегда вернет мне первую пару. Так что у меня нет возможности попробовать другие элементы. И еще проблема с пробелами:
Моя программа возвращает мне следующее:
1 2 2 3 3 4
1 2 2 3 3 5
Вместо этого:
1 2 2 3 3 4
1 2 2 3 3 5
1 3 3 4 4 5
2 3 3 4 4 5
для этого набора данных:
6
1 2
1 3
3 4
2 3
3 5
4 5
3
using System;

namespace RecursiveDomino
{
class Program
{
static void Main()
{
int n = Convert.ToInt32(Console.ReadLine());

string[] pairList = new string[n];
for (int i = 0; i < n; i++)
{
pairList = Console.ReadLine();
}

int x = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(DominoChain(pairList, x));
}

static string DominoChain(string[] list, int x)
{
string finalList = "";
for (int i = 0; i < list.Length; i++)
{
if (x == 1)
{
return list;
}
}

string temporaryList = DominoChain(list, x - 1);
for (int j = 0; j < list.Length; j++)
{
if (((temporaryList[temporaryList.Length - 1] == list[j][0]) && !temporaryList.Contains(list[j])) || temporaryList == "")
{
finalList += "\n" + temporaryList + " " + list[j];
}
}

return finalList;
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/782 ... rsion-in-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»