0
我目前正在做一個稀疏矩陣加法的問題。我正在通過使用三元組形式製作稀疏矩陣。三重形式是通過使用c中的結構製成的。在c中使用結構添加稀疏矩陣(三元組形式)
struct sparse
{
int row;
int col;
int val;
};
但在做這個稀疏矩陣問題,我遇到了我的代碼只顯示當我給非零值的索引按升序排列(正確的稀疏矩陣如:(0 1 3)1問題( 2 5),(2 2 7)等),否則它會顯示不正確的矩陣。例如,如果給出像(0 1 3),(2 2 7),(1 2 5)等輸入,那麼它顯示錯誤的矩陣。如何解決這個問題,以任何順序的指數,它會給出正確的輸出?
我已經添加了我的輸入和結果輸出。我已經做了兩個稀疏矩陣。
#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;
}`
但是當我們將數組傳遞給函數時,它是傳遞的地址,所以基本上沒有區別。也與我的問題無關。 –
沒錯。再次查看您的代碼,我發現一個邏輯問題導致所有較低索引在序列中遇到較高索引時不會打印。 –
是的,我也想在用戶輸入值和它的各自索引後對它們進行排序。 –