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();
}