あなたが求めているものが正しいかどうか確かめてください。あなたは解決策のいくつかが欠けているようです。
public static IEnumerable<string[]> GetAllCombinations(string[,] input, Stack<string> current = null, int currentCol = 0)
{
if (current == null) current = new Stack<string>();
var rows = input.GetLength(0);
var cols = input.GetLength(1);
for (var row = 0; row < rows; row++)
{
if (input[row, currentCol] == null) continue;
current.Push(input[row, currentCol]);
if (currentCol == cols - 1)
{
var result = current.ToArray();
Array.Reverse(result);
yield return result;
}
else
{
var subResults = GetAllCombinations(input, current, currentCol + 1);
foreach (var subResult in subResults)
yield return subResult;
}
current.Pop();
}
}
static void Main()
{
var input = new[,]
{
{"bear", "claw", "donut"},
{"chicken", "salad", null},
{"tuna", null, "salad"}
};
foreach (var comb in GetAllCombinations(input))
Console.WriteLine(string.Join(",", comb));
}
と出力:
bear,claw,donut
bear,claw,salad
bear,salad,donut
bear,salad,salad
chicken,claw,donut
chicken,claw,salad
chicken,salad,donut
chicken,salad,salad
tuna,claw,donut
tuna,claw,salad
tuna,salad,donut
tuna,salad,salad
これは本当に興味深い問題です...それに取り組んでいます! –
興味深いのは面白いと言っても面白いです – Dan
ハハ、それはイライラより面白いよ –