wir haben die Aufgabe bekommen ein Sudokugenerator zu programmieren.
Also meine Idee war folgende:
Ich erstelle eine Matrix 9x9 jeweil mit Variabeln.
Dann erzeuge ich Zahlen von 1 bis 9.
Wenn Abfrage, ob z1a=z1b ist dann wieder neu generieren
nachher Zeilen Abfrage, ob die Zahl da schon auftaucht.
Nun hab ich da was gemacht, da ich totaler Anfänger bin, sind meine If-Sätze und alles drum rum nicht so dolle, hoffe könnt mir helfen
Ich vermute, diese Zeile macht nicht das, was Du erwartest.
"A~=B" erzeugt einen skalaren LOGICAL, "(A~=B)~=C" vergleich diesen dann mit dem Dritten Wert.
Dewegen kann ich Deinen Ansatz nicht nachvollziehen.
Mir ist die Funktion "unifrnd" übrigens unbekannt.
Wenn Du einen 3x3 Block mit den Zahlen 1 bis 9 erstellen möchtest, wird es extrem lange dauern solange Zufallszahlen zu ziehen, bis keine doppelt vorkommt! Wenn Du das für die ganze 9x9 Matrix versucht, können das schon ein paar Millionen Jahre Rechenzeit sein.
Viell schneller geht es gleich mit der Voraussetzung zu beginnen und den Vektor [1:9] einfach zufällig zu mischen (siehe RANDPERM).
Trotzdem würde ich für ein Sudoku einen ganz anderen Ansatz wählen. Zum Glück wimmelt es im Netz ja von Beschreibungen...
ok danke, also ist das schwachsinnig was ich mir da so vorgestellt habe, direkt verwerfen und garnicht weiter machen!
Das stimmt mit den Beispielen im Netz, jedoch sind so recht komplex für mich aufgebaut, habe dies nicht nachvollziehen können, da sogar irgendwelche Grafiken erzeugt werden und das verwirt momentan noch.
Also hab mich nochmal dran gesetzt und hab jetzt ein anderes programmchin geschrieben, jedoch ist da noch was krumm an der Sache, also ich lass prüfen, ob in der ein unteren Zeile die Spalte die gleiche Zahl hat und das immter weiter, jedoch kommt es immer vor, dass ich in der selben Spalte die gleiche Zahl auftaucht, ich find mein Fehler nicht, hoffe ihr hab da eine Idee, wäre euch recht dankbar
Code:
%Erstellen Vektoren von 1 bis 9
z1=[1:9]
z2=[1:9]
z3=[1:9]
z4=[1:9]
z5=[1:9]
z6=[1:9]
z7=[1:9]
z8=[1:9]
z9=[1:9]
%Erstellung der 9x9 Matrix mit den vorhanden Vektoren
M=[z1; z2; z3; z4; z5; z6; z7; z8; z9]
n=9
%1. Prüfe, ob in den Spalten die gleichen Zahlen kommen, wenn ja dann
%2. Prüfung
%2. Prüfung, ob die untere Zeile einen Identische Zahl in der selben Spalte
%hat, wenn ja dann nochmal neu Zahlen von 1 bis 9 generieren
%Zähler von 1 bis 9, da 9 Spalten
for j=1:n
while((M(1,j)==M(9,j))||(M(2,j)==M(9,j))||(M(3,j)==M(9,j))||(M(4,j)==M(9,j))||(M(4,j)==M(9,j))||(M(5,j)==M(9,j))||(M(6,j)==M(9,j))||(M(7,j)==M(9,j))||(M(8,j)==M(9,j)))
for j=1:n
while((M(1,j)==M(4,j))||(M(2,j)==M(4,j))||(M(3,j)==M(4,j)))
M(4,:)=randperm(9) end end
for j=1:n
while((M(1,j)==M(5,j))||(M(2,j)==M(5,j))||(M(3,j)==M(5,j))||(M(4,j)==M(5,j)))
M(5,:)=randperm(9) end end
for j=1:n
while((M(1,j)==M(6,j))||(M(2,j)==M(6,j))||(M(3,j)==M(6,j))||(M(4,j)==M(6,j))||(M(4,j)==M(6,j))||(M(5,j)==M(6,j)))
M(6,:)=randperm(9) end end
for j=1:n
while((M(1,j)==M(7,j))||(M(2,j)==M(7,j))||(M(3,j)==M(7,j))||(M(4,j)==M(7,j))||(M(4,j)==M(7,j))||(M(5,j)==M(7,j))||(M(6,j)==M(7,j)))
M(7,:)=randperm(9) end end
for j=1:n
while((M(1,j)==M(8,j))||(M(2,j)==M(8,j))||(M(3,j)==M(8,j))||(M(4,j)==M(8,j))||(M(4,j)==M(8,j))||(M(5,j)==M(8,j))||(M(6,j)==M(8,j))||(M(7,j)==M(8,j)))
M(8,:)=randperm(9) end end
for j=1:n
while((M(1,j)==M(9,j))||(M(2,j)==M(9,j))||(M(3,j)==M(9,j))||(M(4,j)==M(9,j))||(M(4,j)==M(9,j))||(M(5,j)==M(9,j))||(M(6,j)==M(9,j))||(M(7,j)==M(9,j))||(M(8,j)==M(9,j)))
M(9,:)=randperm(9) end end
for j=1:n
while((M(1,j)==M(4,j))||(M(2,j)==M(4,j))||(M(3,j)==M(4,j)))
M(4,:)=randperm(9) end end
for j=1:n
while((M(1,j)==M(5,j))||(M(2,j)==M(5,j))||(M(3,j)==M(5,j))||(M(4,j)==M(5,j)))
M(5,:)=randperm(9) end end
for j=1:n
while((M(1,j)==M(6,j))||(M(2,j)==M(6,j))||(M(3,j)==M(6,j))||(M(4,j)==M(6,j))||(M(4,j)==M(6,j))||(M(5,j)==M(6,j)))
M(6,:)=randperm(9) end end
for j=1:n
while((M(1,j)==M(7,j))||(M(2,j)==M(7,j))||(M(3,j)==M(7,j))||(M(4,j)==M(7,j))||(M(4,j)==M(7,j))||(M(5,j)==M(7,j))||(M(6,j)==M(7,j)))
M(7,:)=randperm(9) end end
for j=1:n
while((M(1,j)==M(8,j))||(M(2,j)==M(8,j))||(M(3,j)==M(8,j))||(M(4,j)==M(8,j))||(M(4,j)==M(8,j))||(M(5,j)==M(8,j))||(M(6,j)==M(8,j))||(M(7,j)==M(8,j)))
M(8,:)=randperm(9) end end
for j=1:n
while((M(1,j)==M(9,j))||(M(2,j)==M(9,j))||(M(3,j)==M(9,j))||(M(4,j)==M(9,j))||(M(4,j)==M(9,j))||(M(5,j)==M(9,j))||(M(6,j)==M(9,j))||(M(7,j)==M(9,j))||(M(8,j)==M(9,j)))
M(9,:)=randperm(9) end end end end
Erfüllt Dein Programm wirklich alle Sudoku-Regeln? Also auch dass die 3x3-Unter-Matrizen alle 9 Ziffern enthalten?
Gruß, Jan
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.