首页 > 其他 > 详细

[洛谷P3389][模板]高斯消元法

时间:2020-01-16 21:48:28      阅读:74      评论:0      收藏:0      [点我收藏+]
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 
 5 using namespace std;
 6 
 7 int n;
 8 double a[101][102];
 9 
10 void solve()
11 {
12     int g;
13     for(int i=1;i<=n;i++)//消元循环,i用于检索对角线上各个点的行列
14     {
15         if(!a[i][i])
16         {
17             int r=i; //记录当前所在的行
18             for(r=i+1;r<=n;r++) //寻找当前列上不为零的一行
19                 if(a[r][i])
20                 {
21                     break;
22                 }
23             for(int j=1;j<=n+1;j++)
24                 swap(a[r][j],a[i][j]); //换行
25         }
26         /* 接下来利用高斯消元法求解
27         实际左下的三角形对整个式子的结果无影响,
28         只需根据它们求上下的比例关系 */
29         for(int k=i+1;k<=n;k++) //k用于记录需消元的行 
30             for(int j=n+1;j>=i;j--) //j用于记录该行每个需要变化的,用于计算结果的系数
31                 {
32                     a[k][j] -= (a[k][i]/a[i][i])*a[i][j];
33                 }
34                 /*
35                    这里是求出了这一行需要消去的系数和它上面对应的数的
36                    关系,然后按照这个关系对无需消去的数求差,这里一定
37                    是按照三角形消的,因为最外层循环的i在改变,从而就改
38                    变了开始这一“消元”循环的位置,注意用双精
39                 */
40     }
41 
42     for(int i=n;i>=1;i--) //求解循环,从最后一个解倒推
43     {
44         if(!a[i][i])
45         {
46             cout<<"No Solution";
47             return;
48         }
49         for(int j=i+1;j<=n;j++)
50             a[i][n+1] -= a[j][n+1]*a[i][j]; //将解存到等式右边
51         a[i][n+1]/=a[i][i]; //最后的值除以当前的未知数的系数
52     }
53 
54     for(g=1;g<=n;g++)
55         printf("%.2lf\n",a[g][n+1]);
56 }
57 
58 int main()
59 {
60     int pl;
61     ios::sync_with_stdio(false);
62     cin>>n;
63     for(int i=1;i<=n;i++)
64         for(int j=1;j<=n+1;j++)
65             cin>>a[i][j];
66     solve();
67 
68     return 0;
69 }
70 
71 /* 第一个数据devc++和洛谷都能过,vscode过不了,不知道为什么 */

[洛谷P3389][模板]高斯消元法

原文:https://www.cnblogs.com/Foggy-Forest/p/12203194.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!