2017-08-30 8 views
0

現在、疎行列の追加の問題を抱えています。私は三つ組の形を使って疎な行列を作っています。三重項形式は、cの構造を使用して作成されます。c(トリプレット形式)の構造を使用した疎行列の追加

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

が、私は私がオーダー(例えば増加にゼロ以外の値の指標を与えているときに私のコードは唯一の正しいスパース行列を表示する問題が発生し、この疎行列問題をしながら。(0 1 3)、(1 (0 1 3)、(2 2 7)、(1 2 5)などのような入力を与えている場合、間違った行列を表示しています。どのようにこの問題を解決するためにインデックスの任意の順序で正しい出力を与えるだろうか?

私は自分の入力と結果としての出力を追加しました。私は2つの疎な行列に対してこれを行った。オリジナルの答えを更新

#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; 
}` 

答えて

0

:順序値のうち、

理由を印刷取得されていないループのさらに下の要素に三重フォームポイントの値が、過去に行くときからです印刷された他のすべての値。例えば、あなたの例では、3番目の要素はrow = 1、col = 3にありますが、2番目の要素はrow = 2、col = 2にあります。これにより外側のfor-loopが2行目に進む。その時点でループは戻って第1行を印刷しません。

1つの方法は、行とcolに基づいてソートし、値を印刷することです。

+0

しかし、配列を渡すと、渡されるアドレスなので基本的に違いはありません。私の問題とは何の関係もありません。 –

+0

そうです。あなたのコードをもう一度見ると、シーケンス内でより高いインデックスが見つかると、より低いすべてのインデックスが印刷されないというロジックの問題が発生します。 –

+0

私はあまりにもユーザーが値とそれぞれのインデックスを入力した後にそれらを並べ替えることを考えています。 –

関連する問題