使用c(三重形式)结构添加稀疏矩阵

时间:2017-08-30 15:50:33

标签: c data-structures structure sparse-matrix

我目前正在添加稀疏矩阵的问题。我正在使用三元组形式制作稀疏矩阵。三元组形式通过使用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;
 }`

1 个答案:

答案 0 :(得分:0)

更新原始答案:

无法打印出无序值的原因是因为当三元组形式的值指向更低的元素时,for循环将超过可能已打印的所有其他值。例如,在您的示例中,第3个元素位于row = 1,col = 3,但第2个元素位于row = 2,col = 2。这将导致外部for循环向下推进到第2行。在那个时间点,循环不会返回并打印第一行。

一种方法是根据行和列进行排序,然后打印值。