今天我们来探讨下对称矩阵和稀疏矩阵的问题。
为什么要探讨这个问题呢,其实主要是为了他们的一些性质我们可以善加利用。
1.对称矩阵
对称矩阵:关于对称矩阵,元素以主对角线为对称轴对应相等的矩阵。
例如
所以综合以上特点,我们就可以来想办法保存这个对称的矩阵,因为上面这个矩阵的上半部分和下半部分是一样的,所以在这里我们只需要保存一半,然后我们将对角线也进行保存就好了,所以,在这里,我们
所以思路就是我们先对整个矩阵进行遍历,当一个元素的列>=元素的行的时候,这个时候就把这个元素保存到数组当中。这样最后就把整个对称矩阵进行完整的保存了。
在打印输出的时候我们采用相同的思路,如果要输出的是i
#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include<iostream>
#include<cstdlib>
using namespace std;
template <typename T>
class SymmetricMatrix
{
public:
SymmetricMatrix(T* a, size_t size);
~SymmetricMatrix();
T& Access(size_t i, size_t j); //访问矩阵
void Display(); //显示矩阵
protected:
size_t _size; //设置一维数组大小
T* _a; //保存对称矩阵所需要的数组
size_t _n; //对称矩阵的维数
};
template<typename T>
SymmetricMatrix<T>::SymmetricMatrix(T* a, size_t size)
:_size((size*(size + 1)) / 2)
, _a(new T[(size*(size + 1)) / 2])
, _n(size)
{
int index = 0;
for (size_t i = 0; i < size; i++)
{
for (size_t j = 0; j < size; j++)
{
if (i >= j)
{
_a[index] = a[i*size + j];
index++;
}
else
{
break;
}
}
}
}
template