矩阵相关
来源:互联网 发布:游戏数据分析师bi 编辑:程序博客网 时间:2024/06/09 15:03
ACM模版
矩阵乘法
/* * 矩阵乘法 n*n矩阵乘法 */#define MAXN 111#define mod(x) ((x) % MOD)#define MOD 1000000007#define LL long longint n;struct mat{ int m[MAXN][MAXN];};// 矩阵乘法mat operator * (mat a, mat b){ mat ret; LL x; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { x = 0; for (int k = 0; k < n; k++) { x += mod((LL)a.m[i][k] * b.m[k][j]); } ret.m[i][j] = mod(x); } } return ret;}
矩阵乘法 + 判等
/* * AB == C ??? */struct Matrix{ Type mat[MAXN][MAXN]; int n, m; Matrix() { n = m = MAXN; memset(mat, 0, sizeof(mat)); } Matrix(const Matrix &a) { set_size(a.n, a.m); memcpy(mat, a.mat, sizeof(a.mat)); } Matrix & operator = (const Matrix &a) { set_size(a.n, a.m); memcpy(mat, a.mat, sizeof(a.mat)); return *this; } void set_size(int row, int column) { n = row; m = column; } friend Matrix operator * (const Matrix &a, const Matrix &b) { Matrix ret; ret.set_size(a.n, b.m); for (int i = 0; i < a.n; ++i) { for (int k = 0; k < a.m; ++k) { if (a.mat[i][k]) { for (int j = 0; j < b.m; ++j) { if (b.mat[k][j]) { ret.mat[i][j] = ret.mat[i][j] + a.mat[i][k] * b.mat[k][j]; } } } } } return ret; } friend bool operator == (const Matrix &a, const Matrix &b) { if (a.n != b.n || a.m != b.m) { return false; } for (int i = 0; i < a.n; ++i) { for (int j = 0; j < a.m; ++j) { if (a.mat[i][j] != b.mat[i][j]) { return false; } } } return true; }};
矩阵快速幂
/* * 矩阵快速幂 n*n矩阵的x次幂 */#define MAXN 111#define mod(x) ((x) % MOD)#define MOD 1000000007#define LL long longint n;struct mat{ int m[MAXN][MAXN];} unit; // 单元矩阵// 矩阵乘法mat operator * (mat a, mat b){ mat ret; LL x; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { x = 0; for (int k = 0; k < n; k++) { x += mod((LL)a.m[i][k] * b.m[k][j]); } ret.m[i][j] = mod(x); } } return ret;}void init_unit(){ for (int i = 0; i < MAXN; i++) { unit.m[i][i] = 1; } return ;}mat pow_mat(mat a, LL n){ mat ret = unit; while (n) { if (n & 1) {// n--; ret = ret * a; } n >>= 1; a = a * a; } return ret;}int main(){ LL x; init_unit(); while (cin >> n >> x) { mat a; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> a.m[i][j]; } } a = pow_mat(a, x); // a矩阵的x次幂 // 输出矩阵 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (j + 1 == n) { cout << a.m[i][j] << endl; } else { cout << a.m[i][j] << " "; } } } } return 0;}
0 0
- 矩阵相关
- 相关矩阵
- 矩阵相关
- 矩阵相关
- 矩阵相关
- 矩阵相关
- 相关矩阵
- 矩阵相关
- 矩阵的相关计算
- 线程相关--魔鬼矩阵
- 矩阵相关操作
- 矩阵的相关知识
- 稀疏矩阵相关 1
- Matlab 矩阵相关函数
- 均值,相关矩阵,协方差
- 矩阵运算相关问题
- 矩阵 的相关知识
- 矩阵微分相关
- 373. Find K Pairs with Smallest Sums
- nefu118 n!末尾0的个数
- Android SDK 源码解析项目
- LNMP(linux+nginx+mysql+php)环境搭建_2
- linux学习第九篇:安装Tomcat
- 矩阵相关
- POJ2311——Cutting Game(sg函数)
- 1012. The Best Rank (25)-PAT甲级真题
- 程序员代码面试指南 IT名企算法与数据结构题目最优解 ,左程云著
- CentOS6.5 安装 Nginx
- php中$this的引用计数
- python核心编程学习笔记-2016-08-13-03-授权
- 一个PHP实现的轻量级简单爬虫
- HDU 5783 Divide the Sequence