码迷,mamicode.com
首页 > 其他好文 > 详细

高斯消元(模板)

时间:2019-10-25 10:23:11      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:return   ++   put   class   scanf   fabs   can   using   print   

传送门:https://www.luogu.org/problem/P3389

其他的博客会讲的很清晰本蒟蒻就退下了

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n;
 4 double b[109][109];
 5 const double esp=1e-18;
 6 double ans[109];
 7 int main()
 8 {
 9     scanf("%d",&n);
10     for(int i=1;i<=n;i++)
11     {
12         for(int j=1;j<=n+1;j++)
13         {
14             scanf("%lf",&b[i][j]);
15         }
16     }
17     for(int i=1;i<=n;i++)
18     {
19         int pos=i;
20         for(int j=i;j<=n;j++)
21         {
22             if(fabs(b[pos][i])-fabs(b[j][i])<esp)
23             {
24                 pos=j;
25             }
26         }
27         if(fabs(b[pos][i])<esp)
28         {
29             puts("No Solution");
30             return 0;
31         }
32         double div=b[i][i];
33         for(int j=i;j<=n+1;j++)
34         {
35             b[i][j]/=div;//将当前系数化一 
36         }
37         for(int j=i+1;j<=n;j++)
38         {
39             div=b[j][i];
40             for(int k=i;k<=n+1;k++)
41             {
42                 b[j][k]-=b[i][k]*div;
43             }
44         }
45     }
46     /*
47     这个时候的b数组是这个样子的
48     1 x x x | x
49     0 1 x x | x
50     0 0 1 x | x
51     0 0 0 1 | x 
52     */
53     ans[n]=b[n][n+1];//所以只能先确定最后一个解
54     for(int i=n-1;i>=1;i--)
55     {
56         ans[i]=b[i][n+1];    
57         for(int j=i+1;j<=n;j++)
58         {
59             ans[i]-=(b[i][j]*ans[j]);//减去前面的解和它相应的系数 
60         }
61     }
62     for(int i=1;i<=n;i++)
63     {
64         printf("%.2lf\n",ans[i]);
65     }
66 }

 

高斯消元(模板)

标签:return   ++   put   class   scanf   fabs   can   using   print   

原文地址:https://www.cnblogs.com/1129-tangqiyuan/p/11736184.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!