Laden...

Alle Kombinationen einer Liste ausgeben - Permutation (?)

Letzter Beitrag vor 9 Jahren 3 Posts 1.828 Views
Alle Kombinationen einer Liste ausgeben - Permutation (?)

Hallo liebe Community,

ich weiß nicht, ob meine Themenbezeichnung treffen ist, jedoch kommt sie meiner Beschreibung des möglichen Szenarios am nächsten.

Es geht um folgendes:

Für ein Spiel das ich aus Hobbyzwecken programmiere, benötige ich eine Funktion, die mir anhand einer beliebigen Anzahl Wörter folgendes Muster ausgibt:

Bsp:

meineFunktion(['Apfel', 'Birne']);

Ausgabe:

Apfel - 0 Birne - 0
Apfel - 0 Birne - 1
Apfel - 0 Birne - 2
Apfel - 1 Birne - 1
Apfel - 1 Birne - 2
Apfel - 2 Birne - 2

Bei 3 Wörtern wäre die Ausgabe wie folgt:

meineFunktion(['Apfel','Birne','Tomate']);

Apfel - 0 Birne - 0 Tomate - 0
Apfel - 0 Birne - 0 Tomate - 1
Apfel - 0 Birne - 0 Tomate - 2
Apfel - 0 Birne - 1 Tomate - 1
Apfel - 0 Birne - 1 Tomate - 2
Apfel - 0 Birne - 2 Tomate - 2
Apfel - 1 Birne - 1 Tomate - 1
Apfel - 1 Birne - 1 Tomate - 2
Apfel - 1 Birne - 2 Tomate - 2
Apfel - 2 Birne - 2 Tomate - 2

Leider stehe ich total auf dem Schlauch und sehe den Wald vor lauter Bäumen nicht mehr... Danke für eure Hilfe!

Liebe Grüße,
reloop

Ist jetzt nicht schön, sollte aber funktionieren.
Das Zauberwort dabei ist Rekursion.


        static List<string> ausgabestring(string prefix, int startindex, List<string> obst)
        {
            List<string> weniger_obst=new List<string>(obst);

            List<string> output=new List<string>();
            if (obst.Count > 0)
            {
                weniger_obst.RemoveAt(0);
                for (int i = startindex; i <= 2; i++)
                {
                    output.AddRange(ausgabestring(prefix + " " + obst[0] + " " + i, i, weniger_obst));
                }
            }
            else 
                output.Add(prefix);
            return output;
        }

Gruß Gwinn

Um den Baum sichtbarer zu machen: einfach eine rekursive Methode mit einer einzigen For-Schleife und dem prefix als Übergabe.
Den fertigen Code werd ich Dir da aber nicht machen, sorry 😉