現在、疎行列の追加の問題を抱えています。私は三つ組の形を使って疎な行列を作っています。三重項形式は、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;
}`
しかし、配列を渡すと、渡されるアドレスなので基本的に違いはありません。私の問題とは何の関係もありません。 –
そうです。あなたのコードをもう一度見ると、シーケンス内でより高いインデックスが見つかると、より低いすべてのインデックスが印刷されないというロジックの問題が発生します。 –
私はあまりにもユーザーが値とそれぞれのインデックスを入力した後にそれらを並べ替えることを考えています。 –