Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Algorithmus zu Kombinatorik

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.12.2009, 00:34 Uhr
~Sokrates
Gast


Hallo

Ich bin noch nicht so versiert i C und habe deshalb eine Frage:


Well my question: Ich habe x char-Arrays mit jeweils n Felder. (z. B. drei Arrays mit je 2 Elementen, die könnten z.B. folgende Zeichen beinahlten:

F K
O E
N S

)


Nun möchte ich alle möglichen Strings kombinieren, wobei aus jedem Array genau ein Zeichen kommt. Für den obigen Fall also:

1 FON
2 FOS
3 FEN
4 FES
5 KON
6 KOS
7 KEN
8 KES

Ich kriege aber den nötigen Algo nicht hin Mein Bauchgefühl sagt mir, dass ich zwei Schleifen ineinander Verschachteln muss, ich habe schon herumexperimentiert aber es nicht hingekriegt.

Hat jemand ein Tipp oder gar die Lösung?

Danke schon im Voraus

PS: Ich verwenden nur C, kein C++
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.12.2009, 00:50 Uhr
0xdeadbeef
Gott
(Operator)


Naja, genau genommen müsstest du x Schleifen ineinander verschachteln, und das ist so direkt nicht möglich. Wonach du suchst, ist ein rekursiver Backtracking-Algorithmus, etwa so:

C++:
/* UNGETESTET */

#include <stddef.h>
#include <stdio.h>

void print_combos(char const *const *data,
                  size_t x,
                  size_t n,
                  char *buffer,
                  size_t depth) {
  if(depth == x) {
    buffer[depth] = '\0';
    puts(buffer);
  } else {
    size_t i;

    for(i = 0; i < n; ++i) {
      buffer[depth] = data[depth][i];
      print_combos(data, x, n, buffer, depth + 1);
    }
  }
}


wobei buffer ein Zeiger auf ein char-Array der Größe x + 1 und depth beim ersten Aufruf 0 ist.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 16.12.2009 um 00:52 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: