NEFU 503 矩阵求解 (非01异或的高斯消元)
题目链接
中文题,高斯消元模板题。
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <queue> #include <vector> #include <map> #include <ctime> using namespace std; typedef long long in; const int maxn=300; //有equ个方程,var个变元。增广矩阵行数为equ,列数为var+1,分别为0到var in equ,var; in a[maxn][maxn]; //增广矩阵 in x[maxn]; //解集 in free_x[maxn];//用来存储自由变元(多解枚举自由变元可以使用) in free_num;//自由变元的个数 //返回值为-1表示无解,为0是唯一解,否则返回自由变元个数 in gcd(in a,in b) {return b==0?a:gcd(b,a%b); } in lcm(in a,in b) {return a/gcd(a,b)*b; } in gauss() {in max_r,col,k;free_num=0;for(k=0,col=0; k<equ&&col<var; k++,col++){max_r=k;for(in i=k+1; i<equ; i++)if(abs(a[i][col])>abs(a[max_r][col]))max_r=i;if(!a[max_r][col]){k--;free_x[free_num++]=col;continue;}if(max_r!=k)for(in j=col; j<var+1; j++)swap(a[k][j],a[max_r][j]);/*for(int i=k+1;i<equ;i++){if(a[i][col]){for(int j=col;j<var+1;j++)a[i][j]^=a[k][j];}}*/for(in i=k+1; i<equ; ++i){if(a[i][col] != 0){in LCM=lcm(abs(a[i][col]),abs(a[k][col]));in ta=LCM/abs(a[i][col]),tb=LCM/abs(a[k][col]);if(a[i][col]*a[k][col] < 0)tb=-tb;for(in j=col; j<var+1; ++j)a[i][j]=a[i][j]*ta-a[k][j]*tb;}}}for(in i=k; i<equ; i++)if(a[i][col])return -1;if(k<var) return var-k;for(in i=k-1; i>=0; --i){in tmp=a[i][var];for(in j=i+1; j<var; ++j)if(a[i][j]!=0)tmp=tmp-(a[i][j]*x[j]);x[i]=tmp/a[i][i];}/*for(int i=var-1;i>=0;i--){x[i]=a[i][var];for(int j=i+1;j<var;j++)x[i]^=(a[i][j]&&x[j]);}*/return 0; } in n; void init() {memset(a,0,sizeof(a));memset(x,0,sizeof(x));equ=n;var=n; } void solve() {in t=gauss();if(t==-1){puts("no sovle!");}else if(t==0){for(int i=0; i<n-1; i++)printf("%d ",x[i]);printf("%d\n",x[n-1]);}else{puts("more sovle!");} } int main() {while(scanf("%lld",&n)!=EOF){init();for(int i=0; i<n; i++)for(int j=0; j<n; j++)scanf("%lld",&a[i][j]);for(int i=0; i<n; i++)scanf("%lld",&a[i][n]);solve();}return 0; }
转载于:https://www.cnblogs.com/Ritchie/p/5865872.html
NEFU 503 矩阵求解 (非01异或的高斯消元)相关推荐
- 计算矩阵的逆和行列式的值(高斯消元+LU分解)
计算矩阵的逆 选主元的高斯消元法 朴素的高斯消元法是将矩阵A和单位矩阵放在一起,通过行操作(或者列操作)将A变为单位矩阵,这个时候单位矩阵就是矩阵A的逆矩阵.从上到下将A变为上三角矩阵的复杂度为O(n ...
- 矩阵与高斯消元【矩阵乘法,高斯消元求线性方程组,求行列式】 全网最详,附例题与姊妹篇 一万三千字详解
(详解)矩阵快速幂详解与常见转移矩阵的构造_秦小咩的博客-CSDN博客_矩阵快速幂转移矩阵 目录 矩阵乘法 矩阵快速幂 伪代码模板 例题一 例题2 例题三 例题四 高斯消元 整形高斯消元 浮点型高斯消 ...
- POJ 1830 开关问题 【01矩阵 高斯消元】
任意门:http://poj.org/problem?id=1830 开关问题 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 1 ...
- 矩阵树 Matrix-Tree 定理实现模板(高斯消元求解行列式)
大佬1博客:https://www.cnblogs.com/zj75211/p/8039443.html 大佬2博客:https://www.cnblogs.com/yangsongyi/p/1069 ...
- 【BZOJ3503】【Cqoi2014】和谐矩阵 高斯消元,解异或方程组
#include <stdio.h> int main() {puts("转载请注明出处");puts("地址:blog.csdn.net/vmurder/a ...
- POJ 1222 1681 1830 3185 开关灯问题 (高斯消元 异或方程组)
POJ 1222 EXTENDED LIGHTS OUT 基本的开关灯问题.还保证唯一解. 我们把每一个灯泡当成一个状态xi,总共有30个,而且每个灯与其他灯的关系也很明显.所以我们就可以列30方程3 ...
- c++用类实现高斯消元法求解线性方程组的解_高斯消元
高斯消元 众所周知,高斯消元是线性代数中重要的一课.通过矩阵来解线性方程组.高斯消元最大的用途就是用来解多元一次方程组. 前置技能 1.线性方程组 线性方程组是各个方程关于未知量均为一次的方程组(例如 ...
- CF446D-DZY Loves Games【高斯消元,矩阵乘法】
正题 题目链接:https://www.luogu.com.cn/problem/CF446D 题目大意 给出nnn个点mmm条边的一张无向图,一些点有陷阱,走到时会损失一条生命,总共有kkk条生命, ...
- 高斯消元(二)——竞赛题目中异或和的高斯消元
然而算法竞赛并不会考到简单的加减消元,它回很隐晦的让你明白,高斯消元还有另外一种用途,那就是解异或方程组. 异或,C++中符号为'^'或关键字"xor",它的逆运算为它本身,可以看 ...
最新文章
- [CF816B] Karen and Coffee(前缀和,思维)
- centos7 安装无线工具包wireless-tools 包含 iwlist,iwconfig命令
- docker——kafka-manager安装
- tracepro应用实例详解_离心铸造工艺(实例)
- android 字符串反转,Golang之字符串操作(反转中英文字符串)
- 萌宠历险记html5游戏在线玩,《神武2》天外魔境现世 萌宠历险记首发
- python设计---空域增强之图片去噪(中值滤波、均值滤波、高斯滤波、双边滤波)
- VC++常见错误原因解析之error LNK2019: 无法解析的外部符号 public: void __thiscall
- OpenStack OVSGRE/VXLAN网络
- 生成解析器:Fsyacc
- 基于遗传算法车辆路径问题(VRP)
- PMSM FOC控制 Matlab/Simulink仿真之反Clark变换
- mis服务器系统,MIS系统中服务器推技术的实现
- 计算机专业对环境保护,计算机与环境保护
- 苹果怎么用微信链接服务器,苹果手机如何设置微信登陆锁
- 微信程序开发系列教程(四)使用微信API创建公众号自定义菜单
- POSCMS 网站设置
- 硬件工程师常用的电路基础公式+换算!
- 踩坑日志1----从zuulFilter到Filter
- 记录第一次完整安卓逆向过程笔记