[C++] 关于矩阵运算类的历史残次品记录
1.[C++] 不新不好的前向星类2.[C++] 不新不好的高精类3.[C++] 不新不好的矩阵运算类
4.[C++] 关于矩阵运算类的历史残次品记录
5.[C++] 基于字符串的高精度容器 3.06.[C++] 封装树状数组7.[C++] 封装了个...滑动窗口8.[C++] 对拍模板9.[C++] Rander10.[namespace hdk] StringAddition_InFix11.[namespace hdk] ordered_vector12.[namespace hdk] Balanced_tree 整合13.[namespace hdk] 向量 direct_vector14.[namespace hdk] 64位 bitset15.[namespace hdk] diff.h16.[namespace hdk] modint声明:用了就寄,完整版在 隔壁. 记下来只是看看之后的自己能不能救活这坨玩意.
Updated : 不写类了,写个结构体的重载矩阵运算。还方便一点
#define maxlen 101
struct matrix{
int n,m,mod;
bool ifmod;
long long mat[maxlen+1][maxlen+1];
void clear(){
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
mat[i][j]=0;
}
}
n=0;
m=0;
ifmod=false;
mod=0;
}
void setmod(int x){
if(x==0){
ifmod=false;
}
else{
ifmod=true;
}
mod=x;
}
void resize(int nsize,int msize){
n=nsize;
m=msize;
}
void fillmain(int x){
for(int i=1;i<=n;++i){
mat[i][i]=x;
}
}
void fillsec(int x){
for(int i=1;i<=n;++i){
mat[i][n-i+1]=x;
}
}
void fill(int x){
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
mat[i][j]=x;
}
}
}
void fill(int x,int startn,int endn,int startm,int endm){
for(int i=startn;i<=endn;++i){
for(int j=startm;j<=endm;++j){
mat[i][j]=x;
}
}
}
void opposite(){
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
mat[i][j]*=-1;
}
}
}
void input(){
cin>>n>>m;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
cin>>mat[i][j];
}
}
}
void inputn(int nsize){
n=nsize;
cin>>m;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
cin>>mat[i][j];
}
}
}
void inputm(int msize){
m=msize;
cin>>n;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
cin>>mat[i][j];
}
}
}
void input(int nsize,int msize){
n=nsize;
m=msize;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
cin>>mat[i][j];
}
}
}
void print(){
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
cout<<mat[i][j]<<" ";
}
cout<<endl;
}
}
matrix operator *(const matrix &A)const{
matrix p;
p.resize(n,A.m);
for(int i=1;i<=n;++i){
for(int j=1;j<=A.m;++j){
for(int k=1;k<=m;++k){
if(ifmod){
p.mat[i][j]+=(mat[i][k]*A.mat[k][j])%mod;
}
else{
p.mat[i][j]+=mat[i][k]*A.mat[k][j];
}
}
}
}
return p;
}
matrix operator +(const matrix &A)const{
matrix p;
p.resize(n,m);
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
if(ifmod){
p.mat[i][j]=(mat[i][j]+A.mat[i][j])%mod;
}
else{
p.mat[i][j]=mat[i][j]+A.mat[i][j];
}
}
}
return p;
}
matrix operator -(const matrix &A)const{
matrix p;
p.resize(n,m);
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
if(ifmod){
p.mat[i][j]=(mat[i][j]-A.mat[i][j])%mod;
}
else{
p.mat[i][j]=mat[i][j]-A.mat[i][j];
}
}
}
return p;
}
matrix operator ^(const int times)const{
matrix p;
p.resize(n,m);
p.fill(1);
for(int i=1;i<=times;++i){
p=p*(*this);
}
return p;
}
matrix operator |(int times)const{
matrix base,p;
base.resize(n,m);
base=(*this);
p.resize(n,m);
p.fillmain(1);
while(times){
if(times&1){
p=p*base;
}
base=base*base;
times>>=1;
}
return p;
}
};
下面这个别用,谁用谁寄
这回是真不好了,有bug没修
#define maxlen 100
class matrix{
private:
int n,m;
public:
int mat[maxlen+1][maxlen+1];
void clear(){
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
mat[i][j]=0;
}
}
n=0;
m=0;
}
void resize(int nsize,int msize){
n=nsize;
m=msize;
}
void fill(int x){
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
mat[i][j]=x;
}
}
}
void fill(int x,int startn,int endn,int startm,int endm){
for(int i=startn;i<=endn;++i){
for(int j=startm;j<=endm;++j){
mat[i][j]=x;
}
}
}
void opposite(){
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
mat[i][j]*=-1;
}
}
}
void input(){
cin>>n>>m;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
cin>>mat[i][j];
}
}
}
void inputn(int nsize){
n=nsize;
cin>>m;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
cin>>mat[i][j];
}
}
}
void inputm(int msize){
m=msize;
cin>>n;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
cin>>mat[i][j];
}
}
}
void input(int nsize,int msize){
n=nsize;
m=msize;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
cin>>mat[i][j];
}
}
}
void print(){
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
cout<<mat[i][j]<<" ";
}
cout<<endl;
}
}
int nsize(){
return n;
}
int msize(){
return m;
}
bool operator =(matrix &A){
clear();
resize(A.nsize(),A.msize());
for(int i=1;i<=A.nsize();++i){
for(int j=1;j<=A.msize();++j){
mat[i][j]=A.mat[i][j];
}
}
}
void selfmult(){
matrix answer;
answer.resize(n,m);
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
for(int k=1;k<=m;++k){
answer.mat[i][j]+=mat[i][k]*mat[k][j];
}
}
}
clear();
resize(answer.nsize(),answer.msize());
for(int i=1;i<=answer.nsize();++i){
for(int j=1;j<=answer.msize();++j){
mat[i][j]=answer.mat[i][j];
}
}
}
};
class matrix_opera{
public:
matrix answer,a,b;
bool matrix_mult(){
answer.clear();
if(a.msize()!=b.nsize()){
return false;
}
answer.resize(a.nsize(),b.msize());
for(int i=1;i<=a.nsize();++i){
for(int j=1;j<=b.msize();++j){
for(int k=1;k<=a.msize();++k){
answer.mat[i][j]+=a.mat[i][k]*b.mat[k][j];
}
}
}
return true;
}
bool matrix_add(){
answer.clear();
if(a.msize()!=b.msize()){
return false;
}
if(a.nsize()!=b.nsize()){
return false;
}
answer.resize(a.nsize(),b.msize());
for(int i=1;i<=a.nsize();++i){
for(int j=1;j<=a.msize();++j){
answer.mat[i][j]=a.mat[i][j]+b.mat[i][j];
}
}
return true;
}
bool matrix_reduce(){
answer.clear();
if(a.msize()!=b.msize()){
return false;
}
if(a.nsize()!=b.nsize()){
return false;
}
answer.resize(a.nsize(),b.msize());
for(int i=1;i<=a.nsize();++i){
for(int j=1;j<=a.msize();++j){
answer.mat[i][j]=a.mat[i][j]-b.mat[i][j];
}
}
return true;
}
void store_answer(){
a.clear();
a.resize(answer.nsize(),answer.msize());
for(int i=1;i<=a.nsize();++i){
for(int j=1;j<=a.msize();++j){
a.mat[i][j]=answer.mat[i][j];
}
}
}
bool matrix_selfmult(){
answer.clear();
if(a.msize()!=a.nsize()){
return false;
}
answer.resize(a.nsize(),a.msize());
for(int i=1;i<=a.nsize();++i){
for(int j=1;j<=a.msize();++j){
for(int k=1;k<=a.msize();++k){
answer.mat[i][j]+=a.mat[i][k]*a.mat[k][j];
}
}
}
return true;
}
void matrix_power(int times){
answer.clear();
answer.resize(a.nsize(),a.nsize());
for(int i=1;i<=times-1;++i){
matrix_selfmult();
store_answer();
}
}
void matrix_quickpower(int times){
b.clear();
b.resize(a.nsize(),a.nsize());
b.fill(1);
while(times){
if(times&1){
matrix_mult();
b=answer;
}
a.selfmult();
times>>=1;
}
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?