sudoku löser brauche hilfe
Verfasst: Do Jan 14, 2010 5:35 pm
hallo hab als aufgabe ein sudoku zu lösen habs so weit auch hin bekommen nur hab ich das zu lösende sudoku direkt mit integriert und jetzt würde ich doch gerne es selber eingeben oder noch besser aus einer .txt einlesen lassen könnte mir da vllt einer weiter helfen?
hier mal mein bisheriger code achso das ganze ist mit C geschrieben
hier mal mein bisheriger code achso das ganze ist mit C geschrieben
Code: Alles auswählen
#include <stdio.h>
int feld[9][9] = { /* Das zu loesende Sudoku */
{0,3,0, 0,0,0, 9,0,2},
{0,0,0, 1,9,5, 0,0,0},
{0,9,8, 0,0,0, 0,6,0},
{8,0,0, 0,6,0, 0,0,0},
{4,0,0, 0,0,3, 0,0,1},
{0,0,3, 0,2,0, 0,5,0},
{0,6,0, 0,0,0, 2,8,0},
{0,0,0, 4,1,9, 0,0,5},
{3,0,0, 2,0,0, 0,7,0},
};
void output() {
int i,j;
for ( i = 0; i < 9; i++ )
{
for ( j = 0; j < 9; j++ ) {
printf("%d|",feld[i][j]);
if ( j % 3 == 2) printf(" ");
}
printf("\n");
if ( i % 3 == 2 ) printf("\n");
}
printf("--------------------\n\n");
}
/* Es wird u>0 vorausgesetzt. Rueckgabe von 1, falls u bei Position
(a,b) moeglich, sonst Rueckgabe von 0. */
int check(int a, int b, int u) {
int i,j;
if ( feld[a][b]) return 0;
for (i = 0; i < 9; i++) {
if (u == feld[a][i]) return 0;
if (u == feld[i][b]) return 0;
}
for ( i = a - a%3 ; i < a - a%3 + 3; i++)
for (j = b - b%3 ; j < b - b%3 + 3; j++)
if (u == feld[i][j])
return 0;
return 1;
}
int versuche(int k) { /* k --> k/9 k%9 */
int i, q;
while ( k<=80 && feld[k/9][k%9] ) k++; /* naechstes freies Feld? */
if ( k == 81 ) return 1; /* alles belegt, fertig */
for ( q=0, i=1 ; q == 0 && i <= 9 ; i++) {
if ( check(k/9, k%9, i) ) { /* teste das Feld k mit allen i */
feld[k/9][k%9] = i;
if (k == 80) q = 1; /* falls letztes Feld, Erfolg: q=1 */
else
if ( (q = versuche(k+1) ) == 0) /* sonst naechstes Feld */
feld[k/9][k%9] = 0; /* Falls erfolglos, Ruecksetzen */
}
}
return q;
}
int main() {
output();
versuche(0);
output();
}