Autor Beitrag
Namenlosnameless
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Sa 25.12.10 15:23 
Hallo!

Mein erster Post im Algo-Forum :D

Wie durch ein Wunder hab ich ein bisschen Programmieren gelernt ^^ und wollte mal meinen ersten Veruch zu programmieren, in die Tat umsetzen!
Das wäre ein Programm, dass Sudokus erstellt.

Bevor jetzt ein Aufschrei kommt gleich mal vorweg, das Grundprogramm steht (so ziemlich), es hat nur einen großen Fehler!
nämlich: Es kommen unlösbare Sudokus raus.

Ich habe alle Regeln zum setzen von Zahlen implementiert (also: pro Reihe und 3x3-Quadrat jede Zahl nur einmal).
Die für jedes Feld möglichen Zahlen werden per Zufallsgenerator reingeschrieben. Leider gibt es dann irgendwann das Problem, dass für gewisse Felder keine Zahlen mehr möglich sind, und diese können, selbst bei halb gefüllen Spielfeldern, das Sudoku rein theoretisch nicht lösbar machen!

Die Bilder sind im Anhang zu finden!


Bild1: (das Sudoku wird ganz gefüllt! Alle Felder die leer sind haben keine mögliche Zahl
Bild2: Das mittlere Quadrat ist nicht lösbar, da der 2er in die Mitte-Unten muss und dann für einen 9er kein Platz mehr ist. Diese Fehler werden, durch Felder ohne mögliche Zahl verursacht.

um zu verhindern, dass ich Felder ohne Kandiaten hab, brauche ich eine ungefähre Anleitung, für einen Algo. (Es hilft auch nichts meinen bestehenden Algo x-mal laufen zu lassen es ist immer ein Fehler drinnen).


Falls ich irgendwas im Post vergessen haben sollte, bitte sagen :D


mfg Namenlosnameless
Einloggen, um Attachments anzusehen!
_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 25.12.10 17:15 
Glaubt man dem Blog, denn ich mal schnell für dich ergoogelt habe ;) , solltest du lieber erst durch Backtracking ein vollständiges Spielfeld erzeugen und dann zufällige Zahlen entfernen, solange die Lösung eindeutig bleibt.

_________________
>λ=

Für diesen Beitrag haben gedankt: Namenlosnameless
Namenlosnameless Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Sa 25.12.10 17:25 
das tue ich!!

Leider bekomme ich kein vollständiges Spielfeld ;D

_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: Sa 25.12.10 17:32 
Na dann tust du es wohl nicht!

Nutzt du denn bereits Backtracking -> scheinbar nein, das solltest du erst mal ändern, dann klappts auch ;)

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)

Für diesen Beitrag haben gedankt: Namenlosnameless
Namenlosnameless Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Sa 25.12.10 18:39 
ich versuche es zu benutzen! Also ich generiere ein volles Feld und entferne daraus!

Nur das Feld wird nicht ganz voll, da an manchen Stellen, einfach Felder auftreten, für die es keine gültige Zahl gibt. (Also wird das Feld nicht ganz voll)

_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: Sa 25.12.10 20:01 
Ich glaube, du verstehst nicht, was Backtracking bedeutet? Das bedeutet NICHT, alle Felder ausfüllen und dann ein paar Stück löschen. Sondern es ist ein Algorithmus, der genau an der Stelle aufhört, wo keine Lösung möglich ist, den letzten Schritt rückgängig macht und mit es mit einer anderen Zahl oder Platz probiert. Das ganze kann man sich in einer Baumstruktur vorstellen. Der Algorithmus macht solange Schritte rückgängig, bis eine neue gültige Lösung entsteht. Am Ende von Backtracking sind alle Felder ausgefüllt. Das Leeren von manchen Feldern musst du dann wieder gesondert programmieren. Einfach mal nach 'Backtracking' googlen.

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)

Für diesen Beitrag haben gedankt: Namenlosnameless
Namenlosnameless Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Sa 25.12.10 21:17 
Ohhh :D

Es würde sinn ergeben die letzten Worte ins Kha's Post zu lesen :D

Okay so werde ich das mal probieren :)

_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>
Namenlosnameless Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Fr 31.12.10 03:20 
wuhu!!!

Ein Hoch auf Backtracking :D


hab mir die letzten 7 stunden zum Debuggen um die Ohren geschlagen! jetzt ist es 2:15 und ich habs vollendet :)

Ein herzliches DANKE an alle die mir geholfen haben!

_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>