2017-08-30 4 views
0

Ich mache derzeit ein Problem der Zugabe von dünn besetzten Matrizen. Ich mache spärliche Matrix, indem ich Triplett-Form verwende. Die Tripletform wird unter Verwendung der Struktur in c erstellt.Addition von spärlicher Matrix unter Verwendung der Struktur in c (Triplett-Form)

struct sparse 
{ 
    int row; 
    int col; 
    int val; 
}; 

aber während Sie dieses Sparse Matrix Problem begegnete ich ein Problem, das nur mein Code die richtige Sparse Matrix anzeigt, wenn i die Indizes von Nicht-Null-Werte gebe in ansteigender Reihenfolge (zB. (0 1 3), (1 2 5), (2 2 7) usw.) ansonsten zeigt es eine falsche Matrix an. Wenn zB Eingaben wie (0 1 3), (2 2 7), (1 2 5) usw. gemacht werden, wird eine falsche Matrix angezeigt. Wie man dieses Problem löst, damit in jeder Reihenfolge von Indizes es korrekte Ausgabe geben wird?

Ich habe meine Eingabe und resultierende Ausgabe hinzugefügt. Ich habe dies für zwei dünne Matrix getan.

#include<iostream> 
#include<cstdio> 
struct sparse 
{ 
    int row,col,val; 
}; 
void readmat(sparse sp[]) 
{ 
    printf("enter total number number of rows ,column of matrix and total 
    of nonzero values in this\n");    
    scanf("%d %d %d",&sp[0].row,&sp[0].col,&sp[0].val); 
    printf("now start entering the values by specifying index 
    position\n"); 
    for(int i=1;i<=sp[0].val;i++) 
     scanf("%d %d %d",&sp[i].row,&sp[i].col,&sp[i].val); 
} 
void displaymat(sparse sp[]) 
{ 
    int k=1; 
    for(int i=0;i<sp[0].row;i++) 
    { 
     for(int j=0;j<sp[0].col;j++) 
     { 
      if(k<=sp[0].val&&i==sp[k].row&&j==sp[k].col) 
      { 
       printf("%d\t",sp[k].val); 
       k++; 
      } 
      else 
       printf("0\t"); 
     } 
     printf("\n"); 
    } 

} 
int main() 
{ 
    struct sparse sp1[10],sp2[10],sp3[10]; 
    printf("for first matrix\n"); 
    readmat(sp1); 
    printf("for second matrix\n"); 
    readmat(sp2); 
    displaymat(sp1); 
    printf("\n\n"); 
    displaymat(sp2); 
    printf("\n\n"); 
    displaymat(sp3); 
    return 0; 
}` 

Antwort

0

die ursprüngliche Antwort aktualisiert:

Der Grund aus, um Werte werden nicht gedruckt zu werden, ist, weil, wenn der Wert in der Triplett-Form zeigt auf ein Element weiter unten in der for-Schleifen vorbei gehen alle anderen Werte, die gedruckt werden könnten. In Ihrem Beispiel ist das dritte Element z. B. in Zeile = 1, col = 3, das zweite Element jedoch in Zeile = 2, Spalte = 2. Dies führt dazu, dass die äußere For-Schleife in die 2. Reihe vorrückt. Zu diesem Zeitpunkt werden die Loops nicht zurückgehen und erste Reihe drucken.

Eine Möglichkeit besteht darin, basierend auf Zeile und Spalte zu sortieren und dann die Werte zu drucken.

+0

aber wenn wir Array zu Funktion übergeben, ist es die Adresse, die übergeben wird, also gibt es im Grunde keinen Unterschied. und es hat auch nichts mit meinem Problem zu tun. –

+0

Das stimmt. Betrachte ich den Code erneut, sehe ich ein Problem mit der Logik, die dazu führt, dass alle unteren Indizes nicht gedruckt werden, sobald ein höherer Index in der Sequenz gefunden wird. –

+0

Ja, ich denke auch daran, sie nach dem eingegebenen Wert und dem entsprechenden Index zu sortieren. –

Verwandte Themen