Я пробовал обновить свой код до этой версии, но все равно не работает:
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
Как мне решить эту игру в домино, используя рекурсию на C#? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Превратите игру с черепахой Python в локальную многопользовательскую игру LAN
Anonymous » » в форуме Python - 0 Ответы
- 29 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Поверните игру с черепахой Python в многопользовательскую игру LAN LAN [закрыто]
Anonymous » » в форуме Python - 0 Ответы
- 42 Просмотры
-
Последнее сообщение Anonymous
-