高斯消元与行列式求值 part1
两道模板题,思路与算法却是相当经典。
先说最开始做的行列式求值,题目大致为给一个10*10的行列式,求其值
具体思路(一开始看到题我的思路):
1.暴算,把每种可能组合试一遍,求逆序数,做相应加减运算,一看就知道不是正解。
2.暴算2.0 用递归和代数余子式计算,但同样需计算逆序数。
3.一看就是知道是正解高斯消元,将行列式消为上三角,将对角线相乘。
看看代码:
#include<bits/stdc++.h> //喜闻乐见的万用头 using namespace std; int n; double a[11][11]; //因需处理小数,开double int t=1;bool no; double tim=1; //储存约去系数int main(){cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++) scanf("%lf",&a[i][j]); //由于数据较少(10*10),不用快读}for(int i=1;i<=n;i++){if(!a[i][i]){ //判断当前处理数据是否为0,pointt=i;while(!a[t][i]&&t<=n) t++;if(t==n+1){no=1; continue;} //筛选首项不为0的行,进行交换,别忘记*=-1,最少wa4个for(int j=1;j<=n;j++) swap(a[i][j],a[t][j]);tim*=-1;}double x=a[i][i]; //将该行非0首项(之前的运算保证其不为0且为第一的非0数)for(int j=i;j<=n;j++) a[i][j]/=x; //将每个a[i][i]除为1tim*=x; //将消去系数累乘保存for(int j=i+1;j<=n;j++){x=a[j][i];for(int k=1;k<=n;k++) a[j][k]-=x*a[i][k]; //将每行首项消为0,其余数做相同运算}/*for(int j=1;j<=n;j++){ //输出看看行列式消得对不对for(int k=1;k<=n;k++) cout<<a[j][k]<<" ";cout<<endl;}*/}printf("%0.0lf",tim*a[n][n]); //输出系数与最后一项的乘积,取整return 0; }p.s.:“no”好像在这里没有用,不知为啥就写上了。。。//以下是例题没有的特殊数据 /*8 5 5 10 9 5 9 10 4 3 3 6 1 4 6 7 10 1 1 2 10 8 9 8 7 6 2 3 4 8 3 6 9 1 2 6 3 2 7 8 9 9 5 4 5 1 7 3 10 2 4 6 10 10 5 7 8 4 5 6 10 4 7 5 2*/
point:(以后把需要较大量文字叙述的重点用文下注释解释)
如果a[i][i]为0,则在将要进行的化简运算中会出现 n/0 情况,
对于此类数字输出为“nan”(同学说这是暗示这道题难。。。)“not a number”
而对于此处出现的0,根据高斯消元的相关理论应该往下换,毕竟要组成下三角需把0“沉下去”,所以与下面换行。
p.s.:这道题给了我一点启示:
当初同学最快做出来得了11分,我初次尝试得了64分,这给了我做出来的动力,非常大的动力
我便梦想总有一天我要在全56级初学者之前a掉它,自此,我在家打开的窗口不再是虐杀原形,而是c++,为此,我改变了3次算法,代码重构好多次,提交。。。10几次是有了吧,乘积由64提到95,再提到96,最后查出致命错误终是a了,并达成了梦想。。。不总结了,只是希望以后万念俱灰的自己看到这个能。。。cheer下吧
转载于:https://www.cnblogs.com/648-233/p/10686283.html
高斯消元与行列式求值 part1相关推荐
- 矩阵树 Matrix-Tree 定理实现模板(高斯消元求解行列式)
大佬1博客:https://www.cnblogs.com/zj75211/p/8039443.html 大佬2博客:https://www.cnblogs.com/yangsongyi/p/1069 ...
- 解线性方程组——高斯消元の板子
ATP记得它在很久以前看过一点点高斯消元的东西然后做过一点点题目..但是当时实在是太zz了所以本来就没有很懂这个东西现在更是忘得差不多了.. 所以现在就当重新学一遍了QwQ 一点口胡的解释 高斯消元. ...
- 计算矩阵的逆和行列式的值(高斯消元+LU分解)
计算矩阵的逆 选主元的高斯消元法 朴素的高斯消元法是将矩阵A和单位矩阵放在一起,通过行操作(或者列操作)将A变为单位矩阵,这个时候单位矩阵就是矩阵A的逆矩阵.从上到下将A变为上三角矩阵的复杂度为O(n ...
- 矩阵与高斯消元【矩阵乘法,高斯消元求线性方程组,求行列式】 全网最详,附例题与姊妹篇 一万三千字详解
(详解)矩阵快速幂详解与常见转移矩阵的构造_秦小咩的博客-CSDN博客_矩阵快速幂转移矩阵 目录 矩阵乘法 矩阵快速幂 伪代码模板 例题一 例题2 例题三 例题四 高斯消元 整形高斯消元 浮点型高斯消 ...
- 【bzoj2460】[BeiJing2011]元素 贪心+高斯消元求线性基
题目描述 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石. 一般地,矿石越多则法力越强,但物极必反 ...
- 高斯消元+叉积求面积+记忆化搜索
P3389 [模板]高斯消元法 模板采用高斯-约旦消元法 步骤如下: 1.选择一个尚未被选择过的,且为该列的最大系数的未知数作为主元,进行整行交换. 2.再将这一列的其他系数通过行初等变换都变为0.具 ...
- 【BZOJ2115】[Wc2011] Xor 高斯消元求线性基+DFS
[BZOJ2115][Wc2011] Xor Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ...
- 洛谷 - P4783 【模板】矩阵求逆(高斯消元求逆矩阵)
题目链接:点击查看 题目大意:给出一个 n * n 的矩阵,求出其逆矩阵,mod 为 1e9 + 7,若不存在输出 No Solution 题目分析:囤个模板,原理就是,初始时在原矩阵右侧设置一个单位 ...
- BZOJ:4820: [Sdoi2017]硬币游戏BZOJ:1444: [Jsoi2009]有趣的游戏(高斯消元求概率)
1444: [Jsoi2009]有趣的游戏 4820: [Sdoi2017]硬币游戏 这两道题都是关于不断随机生成字符后求出现给定字符串的概率的问题. 第一题数据范围较小,将串建成AC自动机以后,以A ...
最新文章
- iphone微信美颜插件_Cydia插件推荐
- 【005】◀▶ C#学习笔记(四)(集合)
- redhat linux加密卷
- 3种语言白色汇汇通微盘程序源码
- 21天JenkinsDay11 对某个job单独设置权限
- 若在一分页存储管理系统中,某作业的页表如表所示。已知页面大小为 1024字节,试将逻辑地址 1011,2148,3000,4000,5012转化为相应的物理地址。
- Python基础语法回顾
- CAD图纸打印自动排版
- Java中创建Excel文档,POI使用详解
- android 日语输入法,Android日语输入法Simeji使用示例
- android测试内存的软件下载,AndroBench p10内存门app下载
- 【Win32 API】GetPixel函数返回的颜色值不正确
- 塔木德分财产,有图,快速过关
- SQL Server T-SQL语言
- Android手机fc模拟器,安卓fc模拟器
- SQL server无法启动服务,提示“错误1069: 由于登录失败而无法启动服务”
- MAYA快捷键,安装包安装视频,送给刚学习的3d建模人
- mysql最新版百度云下载[免费]
- 为什么日本编程语言ruby没前途
- 数据挖掘人员工作领域分为哪几类,各自需要掌握哪些知识?