Salve, avrei bisogno di aiuto con questo esercizio in C o C++
Un sottoquadrato di un quadrato latino L `e una sottomatrice di L (che non necessariamente consiste di entrate
adiacenti) che `e essa stessa un quadrato latino.
Scrivere un programma che riceva in input un quadrato latino L come nell’Esercizio 1 (ammettendo che la sequenza
introdotta sia corretta) ed un intero k fra 0 e n^2 −1, e restituisca la sequenza dei sottoquadrati che hanno in comune
solo l’entrata k-ma del quadrato (ottenta contando le entrate riga per riga). I sottoquadrati trovati devono essere
propri, vale a dire diversi da L, e minimali, cio`e non devono contenere altri sottoquadrati nella lista.
ESEMPIO:
0123
3210
2301
1032
è un quadrato latino. Ammesso di inserire k=10 (quindi lo 0 della terza riga) il programma dovrebbe ritornare
0 2 8 10 - 6 7 10 11 - 9 10 13 14 (che sono le coordinate per riga)
Adesso io ho la prima parte di programma in cui inserisco il quadrato, il problema è che vorrei un modo per individuare k nella matrice. Ho provato con le classi di equivalenza, ma non veniva, quindi avevo pensato di caricare tutta la matrice in un vettore ak e il numero che mi serve sarà ak[k]. Il problema è che a me servono sia la riga sia la colonna di k perchè ovviamente il quadrato parte praticamente da lì.
Un sottoquadrato di un quadrato latino L `e una sottomatrice di L (che non necessariamente consiste di entrate
adiacenti) che `e essa stessa un quadrato latino.
Scrivere un programma che riceva in input un quadrato latino L come nell’Esercizio 1 (ammettendo che la sequenza
introdotta sia corretta) ed un intero k fra 0 e n^2 −1, e restituisca la sequenza dei sottoquadrati che hanno in comune
solo l’entrata k-ma del quadrato (ottenta contando le entrate riga per riga). I sottoquadrati trovati devono essere
propri, vale a dire diversi da L, e minimali, cio`e non devono contenere altri sottoquadrati nella lista.
ESEMPIO:
0123
3210
2301
1032
è un quadrato latino. Ammesso di inserire k=10 (quindi lo 0 della terza riga) il programma dovrebbe ritornare
0 2 8 10 - 6 7 10 11 - 9 10 13 14 (che sono le coordinate per riga)
Adesso io ho la prima parte di programma in cui inserisco il quadrato, il problema è che vorrei un modo per individuare k nella matrice. Ho provato con le classi di equivalenza, ma non veniva, quindi avevo pensato di caricare tutta la matrice in un vettore ak e il numero che mi serve sarà ak[k]. Il problema è che a me servono sia la riga sia la colonna di k perchè ovviamente il quadrato parte praticamente da lì.
C++:
#include <stdio.h>
#include <stdlib.h>
int main () {
int n, i, j, h=0, k;
scanf ("%d", &n);
if (n<3) printf ("NO");
int a[n][n];
for (i=0; i<n; i++) {for (j=0; j<n; j++) {scanf ("%d", &a[i][j]);
if (a[i][j]<0||a[i][j]>20) {printf ("NO"); return 0;}}}
scanf("%d", &k);
if (k<0||k>(n*n)-1) {printf ("NO"); return 0;}
int ak[n*n];
for (i=0; i<n; i++) {for (j=0; j<n; j++){
ak[h]=a[i][j]; h++;}}
return 0;}