高斯消元学习笔记
来源:互联网 发布:python django教程 编辑:程序博客网 时间:2024/06/01 07:17
思路:
没什么难的,模拟就可以
唯一需要注意的是判断无解还是无穷解,因为做完高斯的时候是一行对一个元的答案,那么如果出现一行全是0的情况就判为无穷解,但是这还不够,因为后面还有可能出现无解的情况,也就是前面全是0而答案不为0的情况,所以要扫完整个矩阵,再出答案。
复杂度O(n^3)
代码:
#include<cstdio>#include<iostream>#include<cstring>#include<cmath>using namespace std;const int max_n = 55;const int inf = 1e6+7;double g[max_n][max_n];int n;inline int check(int x){ int ok=0; for(int i=x; i<=n; ++i) if(g[x][i]!=0) { ok=i; break; } if(!ok) { if(g[x][n+1]) return 2; else return 1; } else if(ok!=x) return 3;}inline void gauss(){ for(int i=1; i<=n; ++i) { int now=i; for(int j=i+1; j<=n; ++j) if(fabs(g[now][i])<fabs(g[j][i])) now=j; for(int j=1; j<=n+1; ++j) swap(g[now][j],g[i][j]); if(g[i][i]==0) continue; for(int j=i+1; j<=n+1; ++j) g[i][j]/=g[i][i]; g[i][i]=1; for(int j=1; j<=n; ++j) if(j!=i) { for(int k=i+1; k<=n+1; ++k) g[j][k]-=g[j][i]*g[i][k]; g[j][i]=0; } } bool ok=false; for(int i=1; i<=n; ++i) { int temp=check(i); if(temp==1) ok=true; if(temp==2) { printf("-1\n"); return; } } if(ok) { printf("0\n"); return; } for(int i=1; i<=n; ++i) { if(g[i][n+1]==0) printf("x%d=0\n",i); else printf("x%d=%.2lf\n",i,g[i][n+1]); }}int main(){ freopen("gaess.in","r",stdin); freopen("gaess.out","w",stdout); scanf("%d",&n); for(int i=1; i<=n; ++i) for(int j=1; j<=n+1; ++j) scanf("%lf",&g[i][j]); gauss(); return 0;}
阅读全文
0 0
- 学习笔记----高斯消元(一)
- 学习笔记----高斯消元(二)
- 高斯消元学习笔记
- 高斯消元学习笔记
- 学习笔记?
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- addslashes和mysql_escape_string,mysql_real_escape_string的区别
- Spark Broadcast概述
- centos7 nginx支持cgi
- SpringBoot 学习记录(十一): hazelcast+swagger2
- validate自定义验证
- 高斯消元学习笔记
- linux 定义别名 命令
- 人人店短信插件开发
- java中的异常处理
- spring的普通类如何注入service、dao
- C#学习笔记——运算符
- jQuery源码剖析--jQuery入口函数-init实现
- Java在虚拟机JVM的运行原理简介
- Java入门是好像没有C入门快