c - 将普通矩阵转置为稀疏矩阵?
问题描述
使用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] 但我无法发现问题所在。
解决方案
推荐阅读
- networking - 通过 Websocket 或 HTTP 连接到在 VPS 上运行的 BSC 节点
- flutter - 在颤动中如何只显示一次底页
- angular-cli - 发生未处理的异常:找不到模块'@angular-devkit/build-angular/package.json'
- python - 如果值以特定字符开头,则替换数据框列中的值
- java - 反编译 MCP 9.18 时如何修复错误?
- go - Kubernetes 操作员使用 yaml 模板创建 Deployment
- razor - razor 渲染的隐藏输入字段中的 Guid 为空没有价值
- typo3 - Typo3 10 在 Typo3 Fluid 中裁剪和调整图像大小无法正常工作
- sql - 将子查询转换为联接
- pdf - 在包含文本的 PDF 上使用 Document AI 仍然包含文本错误