Sudoku erstellen



  • Hallo Leute!
    Ich versuche ein Programm zu schreiben, welches Sudokus erstellt.
    Nur jetzt, obwohl ich noch ganz am Anfang bin, habe ich schon 2 Probleme:
    1.)Die random Funktion generiert immer die exakt gleichen Zahlen
    2.)Irgendwas funktioniert nicht, dass immer verschiedene Zahlen in einer Spalte stehen.
    Also bitte Helft mir!
    Hier ist der Code:

    static int feld[9][9];
      for(int zeile=0; zeile<9; zeile++)
      {
        for(int spalte=0; spalte<9; spalte++)
        {
          feld[zeile][spalte] = rand()%9+1;
          for(int i=spalte-1; i>=0; i--)
          {
            while(feld[zeile][i]==feld[zeile][spalte])
            {
              feld[zeile][spalte] = rand()%9+1;
            }
          }
        }
      }
    


  • 1.) Vermutlich musst Du den Randomnumbergenerator erstmal initialisieren. Das tut man (einmal!) mit srand(seed), für möglichst zufällige Werte mit srand(time(0))
    2.) <Hotline>Tut mir leid, ich habe Ihre Anfrage nicht verstanden. Bitte probieren Sie es nochmal.</Hotline>



  • zu 2.: die while Schleife funktioniert bei mir nicht. Geht sie bei dir?
    Es dürften in der ersten reihe(von feld[0][0] bis feld[9][0]) keine gleichen Zahlen vorkommen.Das tun sie aber. Geht mein Programm bei dir?



  • Du würfelst so lange, bis die Zahl nicht mit der ersten Spalte übereinstimmt, danach, würfelst du neu, bis sie sich von der zweiten Spalte unterscheidet (aber hier kannst du schon wieder den Wert aus der ersten Spalte bekommen) etc. So wird das nichts.
    (außerdem kontrollierst du überhaupt nicht, ob die Spalten und Blöcke korrekt gefüllt sind)

    Ein Lösung wäre es, im Inneren der Schleife einmal den Wert zu würfeln und dann in alle Richtungen zu überprüfen:

    bool passt=true;
    while(passt)
    {
      feld[zeile][spalte]=rand()%9+1;
      for(int i=0;i<spalte;++)
        if(feld[zeile][i]==feld[zeile][spalte]) passt=false;
      ...//weitere Überprüfungen
    }
    

    Aber dabei mußt du noch die Möglichkeit bedenken, daß du dich im weiteren Verlauf total verrennen könntest und ein Feld nicht mehr legal belegen kannst.


Anmelden zum Antworten