题面

高斯消元模板题。

这里直接讲述一下高斯消元的算法流程:

  • 枚举每一列 \(c\);
  • 找到第 \(c\) 列绝对值最大的一行;
  • 将这一行换到最上面;
  • 将该行的第一个数变成 \(1\);
  • 将下面所有行的第 \(c\) 列变成 \(0\)。

处理完后需要从最后一行往回迭代,求出每一个未知数的值。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const double eps = 1e-6; //浮点数误差
  4. int n, m;
  5. double a[103][103];
  6. inline int gauss()
  7. {
  8. int c, r;
  9. //c 为每次枚举的列,r 为当前处理的行
  10. for (c = 0, r = 0; c < n; c+=1) //枚举每一列
  11. {
  12. int max_abs = r;
  13. for (int i = r + 1; i < n; i+=1)
  14. if (fabs(a[i][c]) > fabs(a[max_abs][c]))
  15. max_abs = i; //找到第 c 列绝对值最大的一行
  16. if (fabs(a[max_abs][c]) < eps) continue; //这一列所有数都是 0 就不用处理
  17. for (int i = c; i <= n; i+=1) swap(a[max_abs][i], a[r][i]); //将这一行换到最上面
  18. for (int i = n; i >= c; i-=1) a[r][i] /= a[r][c]; //将这一行的第 c 列变成 1,需要将这一行的所有数都除以第 c 列的数
  19. for (int i = r + 1; i < n; i+=1) //将下面每一行的第 c 列变成 0
  20. if (fabs(a[i][c]) > eps) //如果当前行的第 c 列大于 0
  21. {
  22. for (int j = n; j >= c; j-=1)
  23. a[i][j] -= a[r][j] * a[i][c]; //进行消除
  24. }
  25. ++r;
  26. }
  27. if (r < n)
  28. {
  29. for (int i = r; i < n; i+=1)
  30. if (fabs(a[i][n]) > eps) return 2; //无解
  31. return 1; //有无穷多组解
  32. }
  33. for (int i = n - 1; i >= 0; i-=1) //从下往上迭代
  34. for (int j = i + 1; j < n; j+=1) //枚举原矩阵
  35. a[i][n] -= a[j][n] * a[i][j]; //进行消除
  36. return 0; //有唯一解
  37. }
  38. int main()
  39. {
  40. cin >> n;
  41. for (int i = 0; i < n; i+=1)
  42. for (int j = 0; j < n + 1; j+=1)
  43. scanf("%lf", &a[i][j]);
  44. int t = gauss();
  45. if (t == 0) //有唯一解
  46. for (int i = 0; i < n; i+=1) printf("%.2lf\n", a[i][n]);
  47. else if (t == 1) //有无穷多组解
  48. puts("Infinite group solutions");
  49. else //无解
  50. puts("No solution");
  51. return 0;
  52. }

题解【AcWing883】高斯消元解线性方程组的更多相关文章

  1. Widget Factory (高斯消元解线性方程组)

    The widget factory produces several different kinds of widgets. Each widget is carefully built by a ...

  2. 【BZOJ】2466: [中山市选2009]树 高斯消元解异或方程组

    [题意]给定一棵树的灯,按一次x改变与x距离<=1的点的状态,求全0到全1的最少次数.n<=100. [算法]高斯消元解异或方程组 [题解]设f[i]=0/1表示是否按第i个点的按钮,根据 ...

  3. bzoj千题计划187:bzoj1770: [Usaco2009 Nov]lights 燈 (高斯消元解异或方程组+枚举自由元)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1770 a[i][j] 表示i对j有影响 高斯消元解异或方程组 然后dfs枚举自由元确定最优解 #in ...

  4. [置顶] hdu 4418 高斯消元解方程求期望

    题意:  一个人在一条线段来回走(遇到线段端点就转变方向),现在他从起点出发,并有一个初始方向, 每次都可以走1, 2, 3 ..... m步,都有对应着一个概率.问你他走到终点的概率 思路: 方向问 ...

  5. 【高斯消元解xor方程】BZOJ1923-[Sdoi2010]外星千足虫

    [题目大意] 有n个数或为奇数或为偶数,现在进行m次操作,每次取出部分求和,告诉你这几次操作选取的数和它们和的奇偶性.如果通过这m次操作能得到所有数的奇偶性,则输出进行到第n次时即可求出答案:否则输出 ...

  6. 【高斯消元解xor方程组】BZOJ2466-[中山市选2009]树

    [题目大意] 给出一棵树,初始状态均为0,每反转一个节点的状态,相邻的节点(父亲或儿子)也会反转,问要使状态均为1,至少操作几次? [思路] 一场大暴雨即将来临,白昼恍如黑夜!happy! 和POJ1 ...

  7. poj1830(高斯消元解mod2方程组)

    题目链接:http://poj.org/problem?id=1830 题意:中文题诶- 思路:高斯消元解 mod2 方程组 有 n 个变元,根据给出的条件列 n 个方程组,初始状态和终止状态不同的位 ...

  8. poj1753(高斯消元解mod2方程组)

    题目链接:http://poj.org/problem?id=1753 题意:一个 4*4 的棋盘,初始时上面放满了黑色或白色的棋子.对 (i, j) 位置进行一次操作后 (i, j), (i + 1 ...

  9. hihocoder 第五十二周 高斯消元·二【高斯消元解异或方程 难点【模板】】

    题目地址:http://hihocoder.com/contest/hiho57/problem/1 输入 第1..5行:1个长度为6的字符串,表示该行的格子状态,1表示该格子是亮着的,0表示该格子是 ...

随机推荐

  1. 进阶之路 | 奇妙的Window之旅

    前言 本文已经收录到我的Github个人博客,欢迎大佬们光临寒舍: 我的GIthub博客 学习清单: Window&WindowManagerService Window&Window ...

  2. dict的使用

    Python字典是可变类型数据,可以存储任意对象,如字符串,数字,元组,列表等. 字典的创键 字典有键key和值value组成,使用键值对链接:,字典也称为关联数组或哈希表. dict_person ...

  3. splice和slice这两兄弟为毛这么难记

    容易混淆,决定做下笔记!!! splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目. 语法 arrayObject.splice(index,howmany,item1,....., ...

  4. ES6 - 基础学习(4): 模板字符串和字符串新增方法

    模板字符串 模板字符串:我理解为将字符串格式化.模板化,将字符串加强处理,此处的模板有动词的意思. 字符串模板基本格式: `xxxxxx`(前后都用反引号[tab键上面按键]引起来).除了作为普通字符 ...

  5. Android中通过数组资源文件xml与适配器两种方式给ListView列表视图设置数据源

    场景 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 将布局改 ...

  6. AndroidStudio跑起来第一个App时新手遇到的那些坑

    场景 当你看了一个Android教程,满心欢喜想要运行第一个HelloWorld时却发现,Android Studio新建的工程老是报错. 会编译不通过.运行按钮灰色.没有虚拟机,一个简简单单的Hel ...

  7. 静态SRAM芯片工作原理

    下面谈谈当存储字节的过程是怎样的:下面的示意图显示的也仅仅是最简单状态下的情况,当内存条上仅剩一个RAM芯片的情况.对于X86处理器,它通过地址总线发出一个具有22位二进制数字的地址编码--其中11位 ...

  8. Android 调试桥 (adb) 是 命令行命令--官方拷贝过来的,留作自己查看

    Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信.adb 命令便于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令 ...

  9. mybatis配置---> mybatisConfig.xml 配置加接数据源

    mybatisConfig.xml 配置主要作用是连接数据源配置的前提是在完成mybatis的jar包基础之上进行的同时要确保数据用户名和密码是否正确 一:密码写在 mybatisConfig.xml ...

  10. C#在屏幕画点

    Graphics类没有提供直接画点的方法,最开始想使用填充圆形区域來实现,结果发现点很大,占据了4个像素.使用起点和终点一样来划线什么也没画出.画矩形,画椭圆都没实现.最后试到填充矩形,这次成功了. ...