sto cercando di fare un programma che faccia questo:
Scrivere un programma che controlli se una matrice `e una
soluzione ammissibile per il gioco del Sudoku, Il gioco `e il seguente:
1. viene data una matrice 9x9, riempita con numeri da 1 a 9.
2. la matrice `e suddivisa in 9 sottomatrici quadrate 3x3.
2
3. occorre verificare che sia rispettato il seguente vincolo: ogni riga, colonna e
ogni sottomatrice 3x3 deve contenere TUTTI e SOLI i numeri da 1 a 9.
Input: Il metodo main legger`a 81 interi (compresi tra 1 e 9) da tastiera e li
inserir`a nella matrice. L’inserimento viene eettuato scorrendo la matrice riga per
riga (dalla 0 alla 8) ed ogni riga `e scandita colonna per colonna (dalla 0 alla 8).
Quindi saranno riempite nell’ordine le caselle (0,0) (0,1) (0,2) . . . (0,8), poi (1,0) (1,1)
. . . (1,8), e cos`ı via. Verr`a poi richiamata la funzione da implementare che prender`a
in input tale matrice e restituir`a 1 se la matrice rispetta i vincoli, 0 altrimenti.
Suggerimento: non dovete inserire ogni volta tutti gli interi, se ad esempio scrivete i
vostri 81 valori in un file:
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
potete reindirizzate tale file come input per il vostro programma. Se, dopo la compi-
lazione, generate il programma sudoku.out ed il vostro file di dati si chiama dati.txt,
scrivendo:
./sudoku.out < dati.txt
il file dati.txt viene dato in input al vostro programma (come se inseriste gli 81
elementi da tastiera). Ovviamente sudoku.out e dati.txt devono trovarsi nella stessa
directory. Questa cosa funziona sotto Linux, non so se potete fare qualcosa del genere
con DevC++.
Output: La funzione restituir`a 1 se la matrice rispetta i vincoli, 0 altrimenti.
Nel metodo main verr`a stampato tale valore.
Purtroppo il programma che ho fatto non mi stampa ne 0 ne 1. (Inoltre conoscete un metodo più rapido, con dev c++, di inserire 81 numeri?). Qualcuno può dirmi l'errore?
ecco il programma:
#include <stdio.h>
#include <stdlib.h>
int funzione(int b[9][9]);
int main()
{
int n, r, c;
int b[9][9];
for(r = 0; r < 9; r++){
for(c = 0; c < 9; c++){
scanf("%d", n);
b[r][c] = n;
}}
int funzione(int b);
}
int funzione (int b[9][9])
{
int d, e, f, g, h, r, c;
for(r = 0; r < 9; r++){
for(c = 0; c < 9; c++){
if(b[r][c] == b[r + 1][c])
d++;
}}
for(c = 0; c < 9; c++){
for(r = 0; r < 9; r++){
if(b[r][c] == b[r][c + 1])
d++;
}}
for (c = 0; c < 3; c++){
for(r = 0; r < 3; r++){
if(b[r][c] == b[r][c + 1])
d++;
}}
for (c = 4; c < 6; c++){
for(r = 0; r < 3; r++){
if(b[r][c] == b[r][c + 1])
d++;
}}
for (c = 7; c < 9; c++){
for(r = 0; r < 3; r++){
if(b[r][c] == b[r][c + 1])
d++;
}}
for (c = 0; c < 3; c++){
for(r = 4; r < 6; r++){
if(b[r][c] == b[r][c + 1])
d++;
}}
for (c = 4; c < 6; c++){
for(r = 4; r < 6; r++){
if(b[r][c] == b[r][c + 1])
d++;
}}
for (c = 7; c < 9; c++){
for(r = 4; r < 6; r++){
if(b[r][c] == b[r][c + 1])
d++;
}}
for (c = 0; c < 3; c++){
for(r = 7; r < 9; r++){
if(b[r][c] == b[r][c + 1])
d++;
}}
for (c = 4; c < 6; c++){
for(r = 7; r < 9; r++){
if(b[r][c] == b[r][c + 1])
d++;
}}
for (c = 7; c < 9; c++){
for(r = 7; r < 9; r++){
if(b[r][c] == b[r][c + 1])
d++;
}}
if(d == 0)
printf("1");
else
printf("0");
}