Buongiorno devo realizzare un programma che: determini se la matrice contiene almeno due righe che sono l’una la permutazione dell’altra. Stampare a schermo la risposta e le righe eventualmente individuate. Ho fatto cosi ma non mi viene stampata la riga con permutazione potete aiutarmi
main.c
nodo.h
funzioni.c
main.c
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "nodo.h"
int main(){
FILE *fp;
fp = fopen("dati.txt", "r");
if(!fp) {
perror("Errore");
exit(0);
}
leggiFile(fp);
fclose(fp);
}
nodo.h
C:
#include <stdio.h>
#include <stdlib.h>
struct nodo{
int n1;
int n2;
int n3;
struct nodo *next;
};
int **allocaMatrice(int n, int m);
void stampaMatrice(int **marice, int n, int m);
void leggiFile(FILE *fp);
struct nodo *creaNodo(int n1, int n2, int n3);
struct nodo *inserisciInCoda(struct nodo *lista, int n1, int n2, int n3);
struct nodo *creaLista(struct nodo *lista, int **matrice, int n, int m);
void stampaLista(struct nodo *lista);
void confronta_righe(int** matrice, int n, int m);
funzioni.c
C:
#include <stdio.h>
#include <stdlib.h>
#include "nodo.h"
int **allocaMatrice(int n, int m){
int **matrice = NULL;
matrice = (int**)malloc(n*sizeof(int*));
for(int i = 0; i < n; i++){
matrice[i] = (int*)malloc(m*sizeof(int));
}
return matrice;
}
void stampaMatrice(int **matrice, int n, int m){
for(int i = 0; i < n; i++){
printf("\n");
for(int j = 0; j < m; j++){
printf("%d ", matrice[i][j]);
}
}
}
void leggiFile(FILE *fp){
int **matrice, n, m;
int riga;
struct nodo *lista = NULL;
fscanf(fp, "%d %d", &n, &m);
matrice = allocaMatrice(n, m);
for(int i = 0; i < n; ++i){
for(int j = 0; j < m; ++j){
fscanf(fp, "%d", &matrice[i][j]);
}
}
stampaMatrice(matrice, n, m);
lista = creaLista(lista, matrice, n, m);
printf("\n Inserisci la riga da confrontare:\n");
scanf("%d\n", &riga);
confronta_righe(matrice,n,m);
fclose(fp);
}
struct nodo *creaNodo(int n1, int n2, int n3){
struct nodo *nuovoNodo = (struct nodo *)malloc(sizeof(struct nodo));
if(!nuovoNodo) return NULL;
nuovoNodo->n1 = n1;
nuovoNodo->n2 = n2;
nuovoNodo->n3 = n3;
nuovoNodo->next = NULL;
return nuovoNodo;
}
struct nodo *inserisciInCoda(struct nodo *lista, int n1, int n2, int n3){
if(!lista) return creaNodo(n1, n2, n3);
lista->next = inserisciInCoda(lista->next, n1, n2, n3);
return lista;
}
struct nodo *creaLista(struct nodo *lista, int **matrice, int n, int m){
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
lista = inserisciInCoda(lista, i, j, matrice[i][j]);
}
}
return lista;
}
void stampaLista(struct nodo *lista){
if(!lista)
return;
printf("(%d,%d,%d)\n", lista->n1, lista->n2, lista->n3);
return stampaLista(lista->next);
}
void confronta_righe(int** matrice, int n, int m)
{
int countRowEqual = 0;
for (int i=0; i< n; ++i){
for(int j=0; j<m; ++j)
if(matrice[i][j] == matrice[i][j])
if(j == m-1)
countRowEqual++;
else
break;
}
printf("Rows Equals are : %d",countRowEqual);
}