[算法模板]高斯消元

高斯消元用于求解线性方程。

贴一下代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define maxn 150
int n;
double a[maxn][maxn];
using namespace std;
void gau(){
    for(int i=1;i<=n;i++){
    int line=i;
        for(int j=i+1;j<=n;j++){
            if(fabs(a[line][i])<fabs(a[j][i]))line=j;
        }
        for(int j=1;j<=n+1;j++)swap(a[line][j],a[i][j]);
        if(!a[i][i]){printf("No Solution");return;}
        for(int j=n+1;j>=i+1;j--){
            for(int k=i+1;k<=n;k++){
                a[k][j]-=a[k][i]/a[i][i]*a[i][j];
            }
        }
    }
    for(int i=n;i>=1;i--){
        for(int j=i+1;j<=n;j++){
            a[i][n+1]-=a[j][n+1]*a[i][j];
        }
        a[i][n+1]/=a[i][i];
    }
    for(int i=1;i<=n;i++){
        printf("%.2f\n",a[i][n+1]);
    }
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n+1;j++){
            scanf("%lf",&a[i][j]);
        }
    }
    gau();
}

原文地址:https://www.cnblogs.com/GavinZheng/p/11067621.html

时间: 2024-10-10 06:26:45

[算法模板]高斯消元的相关文章

算法复习——高斯消元(ssoi)

题目: 题目描述 Tom 是个品学兼优的好学生,但由于智商问题,算术学得不是很好,尤其是在解方程这个方面.虽然他解决 2x=2 这样的方程游刃有余,但是对于下面这样的方程组就束手无策了.x+y=3x-y=1于是他要你来帮忙.给定一个线性多元一次方程组,请你求出所有未知数的解.保证在 int 范围内可以处理所有问题. 输入格式 输入文件的第一行一个数字 N(1≤N≤100),表示给定的方程组中的未知数的个数,同时也是这个方程组含有的方程个数.第 2 到 N+1 行,每行 N+1 个数.每行的前 N

【算法】高斯消元&amp;线性代数

寒假作业~就把文章和题解3道题的代码扔在这里啦--链接: https://pan.baidu.com/s/1kWkGnxd 密码: bhh9 1.HNOI2013游走 #include <bits/stdc++.h> using namespace std; #define maxn 600 #define db double int n, m, degree[maxn]; db f[maxn][maxn], ans[maxn], fans; bool dis[maxn][maxn]; str

高斯消元 模板

照着czyuan的那个模板,手敲了一遍,存一下. 貌似今天一整天就看了一下高斯消元的知识,然后看了模板,又手敲了一遍. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <cmath> 6 #include <algorithm> 7 #define LL __int64 8 const int

高斯消元模板

高斯消元: 其实就是用矩阵初等变换解线性方程组,只是他要求每次选取的主元一定要是最大值. 模板 #include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> using namespace std; const int MAXN=10000; int a[MAXN][MAXN];//增广矩阵 int x[MAXN];//解集 bool free_x[MAXN];/

矩阵算法 高斯消元 行列式 矩阵的秩

今天学习一下矩阵的基本算法 高斯消元是解线性方程组的有力工具. 基本思想是通过将增广矩阵经过行初等变化变成简化阶梯形矩阵. 下面采用的是列主元高斯消元法,复杂度为O(n^3). 很容易根据高斯消元法的过程得出行列式和秩的算法. 代码: /********************************************************* * ------------------ * * author AbyssalFish * ***************************

高斯消元模板(kuangbin大神版本)

#include<stdio.h> #include<algorithm> #include<iostream> #include<string.h> #include<math.h> using namespace std; const int MOD = 7; const int MAXN = 50; int a[MAXN][MAXN];//增广矩阵 int x[MAXN];//解集 bool free_x[MAXN];//标记是否是不确定的

HDU 3359 高斯消元模板题,

http://acm.hdu.edu.cn/showproblem.php?pid=3359 题目的意思是,由矩阵A生成矩阵B的方法是: 以a[i][j]为中心的,哈曼顿距离不大于dis的数字的总和 / 个数,就是矩阵B的b[i][j] 现在给出B,要求A 那么我们设A矩阵为a[1][1], a[1][2], a[1][3]..... 那么对于每一个b[i][j]我们有b[i][j] = (a[1][1] + a[1][2] + ... + ) / cnt 所以这样可以建议一条方程,然后guas

【洛谷P3389】【模板】高斯消元

题目链接 题目描述 给定一个线性方程组,对其求解 输入输出格式 输入格式: 第一行,一个正整数 n 第二至 n+1行,每行 n+1 个整数,为a1, a2 .....an? 和 b,代表一组方程. 输出格式: 共n行,每行一个数,第 i行为 xi? (保留2位小数) 如果不存在唯一解,在第一行输出"No Solution". 输入输出样例 输入样例#1: 3 1 3 4 5 1 4 7 3 9 3 2 2 输出样例#1: -0.97 5.18 -2.39 说明 1≤n≤100,∣ai?

LG3389 【模板】高斯消元法 高斯消元

问题描述 LG3389 题解 高斯消元,是用来解\(n\)元一次方程组的算法,时间复杂度\(O(n^3)\) 这样就构造出了这个方程组的矩阵 目标就是把这个矩阵左边\(n \times n\)消为单位矩阵 \(\mathrm{Code}\) #include<bits/stdc++.h> using namespace std; void read(int &x){ x=0;char ch=1;int fh; while(ch!='-'&&(ch<'0'||ch&