Как Умножить две Разреженные Матрицы, используя связанный список - PullRequest
0 голосов
/ 20 октября 2019

Я пробовал умножение двух разреженных матриц с использованием связанного списка. Но эта функция не работает. После вызова функции умножения в main и вывода программы ничего не выводится.

Я думаю, что есть некоторая ошибка при пересечении связанных списков, но она не может идентифицировать ошибку.

представление Matrix в c ++

class Sparse_Matrix 
    {   public:
            int value; 
            int row_position; 
            int column_postion;
            int row;
            int column;

            Sparse_Matrix *next;     
    };

Заголовочный файл для создания нового списка и вставки.

void create_new_node(Sparse_Matrix** start, int non_zero_element,int row_index, int column_index )

Как заставить работать функцию умножения.

void Multiply()
    {   
        int result[50][50];
        int i,j;
        int m=A->row;     //A and B are Global Declration
        int n=B->column;  //They are head ptr of two linked list in which matrix is stored.


        if(A->column!=B->row)
            {
               .
               .
            }

        Sparse_Matrix *tempa,*tempb;
        tempa=A;
        tempb=B;

        while(tempa->next!=NULL)
        { 
            tempb=B;  
            while(tempb->next!=NULL)
            {   
                if(tempa->row_position==tempb->column_position)
                       result[i][j]+=(tempa->value*tempb->value);
                tempb=tempb->next;
            }
            tempa=tempa->next;
        }

        for (i = 0; i < m; i++) 
                for (j = 0; j < n; j++) 
                    if (result[i][j] != 0) 
                        {
                            cout<<result[i][j];
                            create_new_node(&Result, result[i][j], i, j); 
                        }
        PrintList(Result);
    }

...