Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >P3389 【模板】高斯消元法

P3389 【模板】高斯消元法

作者头像
attack
发布于 2018-04-12 02:45:40
发布于 2018-04-12 02:45:40
2K00
代码可运行
举报
运行总次数:0
代码可运行

题目背景

Gauss消元

题目描述

给定一个线性方程组,对其求解

输入输出格式

输入格式:

第一行,一个正整数 nn

第二至 n+1n+1行,每行 n+1n+1 个整数,为,代表一组方程。

输出格式:

共n行,每行一个数,第 ii行为(保留2位小数)

如果不存在唯一解,在第一行输出"No Solution".

输入输出样例

输入样例#1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
3
1 3 4 5
1 4 7 3
9 3 2 2

输出样例#1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-0.97
5.18
-2.39

说明

本来想深入的研究一下矩阵来着,,

结果不知道怎么着的研究到高斯消元上了,。。。。

高斯消元法真是一个神(bao)奇(li)的的东西、

本来想仔细整理整理来着,结果发现我不会在博客园里写矩阵,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cmath>
 4 #include<algorithm>
 5 //#define Matrix double
 6 using namespace std;
 7 const int MAXN=101;
 8 typedef double Matrix[MAXN][MAXN];
 9 inline void read(int &n)
10 {char c=getchar();bool flag=0;
11 while(c<'0'||c>'9')        c=='-'?flag=1,c=getchar():c=getchar();
12 while(c>='0'&&c<='9')    n=n*10+c-48,c=getchar();flag==1?n=-n:n=n;}
13 int n;
14 Matrix a;
15 void debug()
16 {
17     /*printf("********************************\n");
18     for(int i=1;i<=n;i++)
19     {
20         for(int j=1;j<=n+1;j++)    printf("%.2lf ",a[i][j]);
21         printf("\n");
22     }*/
23 }
24 void gauss_elimination(int n)
25 {
26     int r;// 将要选择的最大值 
27     for(int i=1;i<=n;i++)
28     {
29         r=i;
30         for(int j=i+1;j<=n;j++)// 枚举后面的行 
31             if(fabs(a[j][i])>fabs(a[r][i]))    r=j;
32         debug();
33         if(r!=i)    swap(a[r],a[i]);
34         debug();
35         if(!a[i][i])
36         {
37             printf("No Solution\n");
38             return;
39         }
40         for(int k=i+1;k<=n;k++)// 与后面的进行消元
41         {
42             double f=a[k][i]/a[i][i];//模拟人工消元 
43             for(int j=i;j<=n+1;j++)    a[k][j]-=f*a[i][j];
44         } 
45         debug();
46     }
47     debug();
48     for(int i=n;i>=1;i--)
49     {
50         debug();
51         for(int j=i+1;j<=n;j++)
52             a[i][n+1]-=a[j][n+1]*a[i][j];
53         a[i][n+1]/=a[i][i];
54     }
55     for(int i=1;i<=n;i++)
56         printf("%.2lf\n",a[i][n+1]);
57 }
58 int main()
59 {
60     read(n);
61     for(int i=1;i<=n;i++)
62         for(int j=1;j<=n+1;j++)
63             scanf("%lf",&a[i][j]);
64     gauss_elimination(n);            
65     return 0;
66 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-08-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
hihoCoder #1195 : 高斯消元·一
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:喂不得了啦,那边便利店的薯片半价了! 小Hi:啥?! 小Ho:那边的便利店在打折促销啊。 小Hi:走走走,赶紧去看
attack
2018/04/12
6160
高斯消元
众所周知,高斯消元是线性代数中重要的一课。通过矩阵来解线性方程组。高斯消元最大的用途就是用来解多元一次方程组。
ACM算法日常
2019/11/25
6530
洛谷P2455 [SDOI2006]线性方程组(高斯消元)
题目描述 已知n元线性一次方程组。 其中:n<=50, 系数是[b][color=red]整数<=100(有负数),bi的值都是整数且<300(有负数)(特别感谢U14968 mmqqdd提出题目描述
attack
2018/04/19
7330
洛谷P2455 [SDOI2006]线性方程组(高斯消元)
高斯约旦消元法求逆矩阵的思想(分块矩阵的逆矩阵)
求一个 N × N N×N N×N的矩阵的逆矩阵。答案对 1 0 9 + 7 10^9+7 109+7取模。
全栈程序员站长
2022/07/29
1.1K0
[笔记]高斯消元法与矩阵求逆
(a_{i,1} - a_{i,1} \times 1)x_1 + (a_{i,2} - a_{i,1} \times \dfrac{a_{1,2}}{a_{1,1}})x_2 + \ldots = b_i - a_{i,1} \times \dfrac{b_1}{a_{1,1}}
Clouder0
2022/09/23
1.2K0
HDU4418 Time travel(期望dp 高斯消元)
\(f[x] = \sum_{i = 1}^n f[to(x + i)] * p[i] + ave\)
attack
2019/01/03
5250
CDOJ 1330 柱爷与远古法阵【高斯消元,卡精度】
柱爷与远古法阵 Time Limit: 125/125MS (Java/Others)     Memory Limit: 240000/240000KB (Java/Others) Submit Status 众所周知,柱爷的数学非常好,尤其擅长概率论! 某日柱爷在喵哈哈村散步,无意间踏入了远古法阵! 法阵很奇怪,是一个长度为NN的走廊,初始时柱爷在最左边,现在柱爷要到最右边去! 柱爷的行动方式如下: 每个回合柱爷会投一次骰子,根据骰子上的点数每个回合柱爷会投一次骰子,根据骰子上的点数X,柱爷会相应的往
Angel_Kitty
2018/04/09
7000
Luogu P3232 [HNOI2013]游走 题解
在一个无向图中,小Z以1为起点,每次以相等的概率选择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分数。当小Z走到N(即终点),结束了这次游走,总得分为游走时经过的每一条边的编号之和。现在,请你对这M条边进行编号,使得小Z获得的总分的期望值最小。 输入保证: 1. 30%的数据满足N<=10100%的数据满足2<=N<=500
yzxoi
2022/09/19
5220
Luogu P3232 [HNOI2013]游走 题解
高斯消元法(Gauss Elimination)【超详解&模板】
高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵。 高斯消元法的原理是: 若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程
Angel_Kitty
2018/04/09
20.6K0
高斯消元法(Gauss Elimination)【超详解&模板】
BZOJ3143: [Hnoi2013]游走(期望DP 高斯消元)
Description 一个无向连通图,顶点从1编号到N,边从1编号到M。  小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分数。当小Z 到达N号顶点时游走结束,总分为所有获得的分数之和。  现在,请你对这M条边进行编号,使得小Z获得的总分的期望值最小。 Input 第一行是正整数N和M,分别表示该图的顶点数 和边数,接下来M行每行是整数u,v(1≤u,v≤N),表示顶点u与顶点v之间存在一条边。 输入保证3
attack
2018/04/10
9000
高斯消元模版
这模版敲了我俩个小时+写注释,参考自kuangbin! 两百行的大模拟,累死了QAQ 下面附上模版! 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn=50; 4 typedef long long ll; 5 int a[maxn][maxn];///增广矩阵 6 int x[maxn];///解集 7 bool free_x[maxn];///标记是否是不确定的变元 8 /* 9 vo
Angel_Kitty
2018/04/09
5640
【字节笔试,算法-简单->困难】leetcode 1529灯泡开关 + POJ 1830开关问题,从搜索到高斯消元法
扩展问题是今天碰到的字节笔试的第三题,给定一个长度为n的环状数组,按动一次开关可以改变自己和左右的状态(0->1/1->0)。初始全部为0,问如何得到1。 这个问题比较类似POJ1830,相当于自动加上了开关变化的限制。
千灵域
2022/06/17
5410
BZOJ2707: [SDOI2012]走迷宫(期望 tarjan 高斯消元)
显然有\(f[x] = \sum_{y} \frac{f[y]}{deg[x]} + 1\)
attack
2019/01/30
4730
YbtOJ 894「高斯消元」高维寻点
小 A 有一个 m 维空间。在这个空间中有 n 个特殊点,其中第 i 个特殊点 p_i 的坐标为 (x_{i,1},x_{i,2},\cdots,x_{i,m})。
yzxoi
2022/09/19
3000
MatrixTree速成
前言 MatrixTree定理是用来解决生成树计数问题的有利工具 比如说这道题 MatrixTree定理的算法流程也非常简单 我们记矩阵A为无向图的度数矩阵 记矩阵D为无向图的邻接矩阵 A矩阵是除了对角线之外各个点值都为0的矩阵,A[i][i]表示i号点的度数 D矩阵记录两点之间的度数,D[i][j]表示i号点与j号点之间的边数 MatrixTree定理 我们记矩阵G=A-D 那么G的所有不同生成树的个数等于G的任何一个 n-1阶主子式的行列式的绝对值 实现 MatrixTree定理的实现非常简单 计算
attack
2018/04/11
7180
洛谷P2973 [USACO10HOL]赶小猪(高斯消元 期望)
设\(f[i]\)表示炸弹到达\(i\)这个点的概率,转移的时候考虑从哪个点转移而来
attack
2019/01/30
3970
【 HDU 4936 】Rainbow Island (hash + 高斯消元)
BUPT2017 wintertraining(15) #5B HDU - 4936 2014 Multi-University Training Contest 7 F
饶文津
2020/06/02
3780
【 HDU 4936 】Rainbow Island (hash + 高斯消元)
SP104 HIGH - Highways
题目描述 In some countries building highways takes a lot of time... Maybe that's because there are many possiblities to construct a network of highways and engineers can't make up their minds which one to choose. Suppose we have a list of cities that can be co
attack
2018/04/11
6710
矩阵求逆c++实现[通俗易懂]
高斯消元法可以用来找出一个可逆矩阵的逆矩阵。设A 为一个N * N的矩阵,其逆矩阵可被两个分块矩阵表示出来。将一个N * N单位矩阵 放在A 的右手边,形成一个N * 2N的分块矩阵B = [A,I] 。经过高斯消元法的计算程序后,矩阵B 的左手边会变成一个单位矩阵I ,而逆矩阵A ^(-1) 会出现在B 的右手边。假如高斯消元法不能将A 化为三角形的格式,那就代表A 是一个不可逆的矩阵。应用上,高斯消元法极少被用来求出逆矩阵。高斯消元法通常只为线性方程组求解。
全栈程序员站长
2022/09/25
1.7K0
矩阵求逆c++实现[通俗易懂]
矩阵树定理
矩阵树定理:对于一个无向图 ,它的生成树个数等于其基尔霍夫矩阵任何一个 阶主子式的行列式的绝对值。
hotarugali
2022/03/01
5080
相关推荐
hihoCoder #1195 : 高斯消元·一
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档