//稀疏矩阵
#include <stdio.h>
#include <stdlib.h>
void display(int c, int sparse[][5])
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < c; j++)
{
printf("%d ", sparse[i][j]);
}
printf("\n");
}
}
int main()
{
int c = 0, array[5][5] =
{
{0, 0, 4, 0, 0},
{0, 7, 0, 0, 0},
{0, 0, 0, 9, 0},
{0, 6, 0, 3, 0},
{0, 0, 2, 0, 0}};
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
if (array[i][j] != 0)
{
c++;
}
}
}
int k = 0, sparse[3][c];
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
if (array[i][j] != 0)
{
sparse[0][k] = i;
sparse[1][k] = j;
sparse[2][k] = array[i][j];
k++;
}
}
}
display(c, sparse);
return 0;
}
我尝试使用稀疏矩阵表示,它具有行、列、垂直非零元素的值,因此如果有 7 个非零元素,则将创建由行、列、等于三行的值和计数组成的新矩阵列数取决于非零的计数, 但它的行为很奇怪,首先我在声明一个新矩阵时注意到一个错误曲线,我必须在其中放置列大小(非零元素的计数),但我忽略了它,因为我想不出更好的方法, 它确实运行了,但答案很奇怪,虽然它确实是我想要的形式,但它是混合的,我的意思是,如果在找到非零元素时第一个元素是4,那么新矩阵第一列第三行应该包含4 ,但事实并非如此,而且一切都混淆了,
然后为了进行更改,我添加了另一个非零元素,它现在显示随机数,不知道如何,
这是一个正确获取数组索引的问题。修改的地方添加评论:
#include <stdio.h>
#include <stdlib.h>
void display(int c, int sparse[][3]) // 5 -> 3
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < c; j++)
{
printf("%d ", sparse[j][i]);
}
printf("\n");
}
}
int main()
{
int c = 0, array[5][5] =
{
{0, 0, 4, 0, 0},
{0, 7, 11, 13, 0},
{0, 0, 0, 9, 0},
{0, 6, 0, 3, 0},
{0, 0, 2, 0, 0}};
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
if (array[i][j] != 0)
{
c++;
}
}
}
int k = 0, sparse[c][3]; // Swap indexing to match expectation of display()
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
if (array[i][j] != 0)
{
sparse[k][0] = i; // Indexing swapped
sparse[k][1] = j;
sparse[k][2] = array[i][j];
k++;
}
}
}
display(c, sparse);
return 0;
}