首页 > 解决方案 > 将普通矩阵转置为稀疏矩阵?

问题描述

使用C,我想将普通矩阵转置为稀疏矩阵,这有什么问题?

#include <stdio.h>
#include <stdlib.h>

int i;
int j;

int size1;
int size2;

int **mat1;
int **mat2;
int **sparseMat1;
int **sparseMat2;
int **tempMat;

void newMatrix(int **matrix, int n);
    
void moveToSparse(int **matrix, int** sparseMat, int size);

只需随机化一个大小为 nxn 的矩阵,创建并使其成为 sparsematrix

int main(void){
    size1 = rand() % 10 + 10;
    size2 = rand() % 10 + 10;
    newMatrix(mat1, size1);
    newMatrix(mat2, size2);
    moveToSparse(mat1, sparseMat1, size1);
    moveToSparse(mat2, sparseMat2, size2);

}

这部分是创建一个新的 n,n 矩阵

void newMatrix(int** matrix, int n) {
    matrix = (int**)malloc(n * sizeof(int*));
    for (i = 0; i < n; i++) {
        matrix[i] = (int*)malloc(sizeof(int) * n);
    }

    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            matrix[i][j] = rand() % 100;
        }
    }
}

这部分是将正常矩阵转换为稀疏矩阵

void moveToSparse(int** matrix, int **sparseMat,int n) {
    int k = 1;

    sparseMat = (int**)malloc(n * sizeof(int*));
    for (i = 0; i < 3; i++) {
        sparseMat[i] = (int*)malloc(sizeof(int) * 3);
    }

    sparseMat[0][0] = n;
    sparseMat[0][1] = n;

    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            if (matrix[i][j]>0) {
                sparseMat[k][0] = i;
                sparseMat[k][1] = j;
                sparseMat[k][2] = matrix[i][j];
                k++;
            }
        }
    }

    sparseMat[0][2] = k;

}

我认为它无法读取 Matrix[i][j] 但我无法发现问题所在。

标签: c

解决方案


推荐阅读