#include /* Program for creating a sudoku */ int get_urandom(FILE *fp) { int rnd; fread(&rnd, sizeof(int), 1, fp); rnd=(rnd % 5)+5; return rnd; } void init_grid(int grid[][9]) { int y; int x; for ( y = 0; y < 9; y++ ) { for ( x = 0; x < 9; x++ ) { grid[y][x] = 0; } } } /* If n is found in row, return 1. Otherwise return 0. */ int if_row(int grid[][9], int y, int n) { int x; for ( x = 0; x < 9; x++ ) { if ( grid[y][x] == n ) return 1; } return 0; } /* If n is found in column, return 1. Otherwise return 0. */ int if_column(int grid[][9], int x, int n) { int y; for ( y = 0; y < 9; y++ ) { if ( grid[y][x] == n ) return 1; } return 0; } /* If n is found in region, return 1. Otherwise return 0. */ int if_region(int grid[][9], int y, int x, int n) { int y_begin; int y_end; int x_begin; int x_end; if ( y < 3 ) { y_begin = 0; y_end = 3; } else if ( y < 6 ) { y_begin = 3; y_end = 6; } else { y_begin = 6; y_end = 9; } if ( x < 3 ) { x_begin = 0; x_end = 3; } else if ( x < 6 ) { x_begin = 3; x_end = 6; } else { x_begin = 6; x_end = 9; } for ( y = y_begin; y < y_end; y++ ) { for ( x = x_begin; x < x_end; x++ ) { if ( grid[y][x] == n ) return 1; } } return 0; } int fill_grid(int grid[][9]) { int row; int col; int rnd; int check; FILE *fp = fopen("/dev/urandom", "r"); for ( row = 0; row < 9; row++ ) { for ( col = 0; col < 9; col++ ) { if ( col == 8 ) { for ( check = 1; check < 10; check++ ) { if ( if_row(grid, row, check) == 0 && if_column(grid, col, check) == 0 && if_region(grid, row, col, check) == 0 ) break; else if ( check == 9 ) return 1; } } do { rnd = get_urandom(fp); } while ( if_row(grid, row, rnd) == 1 || if_column(grid, col, rnd) == 1 || if_region(grid, row, col, rnd) == 1 ); grid[row][col] = rnd; printf( "%i ", grid[row][col] ); } printf( "\n" ); } return 0; } void print_grid(int grid[][9]) { int y; int x; printf( " 0 1 2 3 4 5 6 7 8\n" ); printf( " -----------------\n" ); for ( y = 0; y < 9; y++ ) { printf( "%i | ", y ); for ( x = 0; x < 9; x++ ) { printf( "%i ", grid[y][x] ); } printf( "\n" ); } } int main() { int grid[9][9]; init_grid(grid); fill_grid(grid); print_grid(grid); } #include /* Program for creating a sudoku */ int get_urandom(FILE *fp) { int rnd; fread(&rnd, sizeof(int), 1, fp); rnd=(rnd % 5)+5; return rnd; } void init_grid(int grid[][9]) { int y; int x; for ( y = 0; y < 9; y++ ) { for ( x = 0; x < 9; x++ ) { grid[y][x] = 0; } } } /* If n is found in row, return 1. Otherwise return 0. */ int if_row(int grid[][9], int y, int n) { int x; for ( x = 0; x < 9; x++ ) { if ( grid[y][x] == n ) return 1; } return 0; } /* If n is found in column, return 1. Otherwise return 0. */ int if_column(int grid[][9], int x, int n) { int y; for ( y = 0; y < 9; y++ ) { if ( grid[y][x] == n ) return 1; } return 0; } /* If n is found in region, return 1. Otherwise return 0. */ int if_region(int grid[][9], int y, int x, int n) { int y_begin; int y_end; int x_begin; int x_end; if ( y < 3 ) { y_begin = 0; y_end = 3; } else if ( y < 6 ) { y_begin = 3; y_end = 6; } else { y_begin = 6; y_end = 9; } if ( x < 3 ) { x_begin = 0; x_end = 3; } else if ( x < 6 ) { x_begin = 3; x_end = 6; } else { x_begin = 6; x_end = 9; } for ( y = y_begin; y < y_end; y++ ) { for ( x = x_begin; x < x_end; x++ ) { if ( grid[y][x] == n ) return 1; } } return 0; } int fill_grid(int grid[][9]) { int row; int col; int rnd; int check; FILE *fp = fopen("/dev/urandom", "r"); for ( row = 0; row < 9; row++ ) { for ( col = 0; col < 9; col++ ) { if ( col == 8 ) { for ( check = 1; check < 10; check++ ) { if ( if_row(grid, row, check) == 0 && if_column(grid, col, check) == 0 && if_region(grid, row, col, check) == 0 ) break; else if ( check == 9 ) return 1; } } do { rnd = get_urandom(fp); } while ( if_row(grid, row, rnd) == 1 || if_column(grid, col, rnd) == 1 || if_region(grid, row, col, rnd) == 1 ); grid[row][col] = rnd; printf( "%i ", grid[row][col] ); } printf( "\n" ); } return 0; } void print_grid(int grid[][9]) { int y; int x; printf( " 0 1 2 3 4 5 6 7 8\n" ); printf( " -----------------\n" ); for ( y = 0; y < 9; y++ ) { printf( "%i | ", y ); for ( x = 0; x < 9; x++ ) { printf( "%i ", grid[y][x] ); } printf( "\n" ); } } int main() { int grid[9][9]; init_grid(grid); fill_grid(grid); print_grid(grid); }