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

【模板】高斯消元法

时间:2017-12-04 21:25:56      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:getc   wap   技术   pen   name   printf   ace   namespace   mes   

洛谷1583

技术分享图片
 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn=1000;
 5 int n,x;
 6 double a[maxn][maxn];
 7 inline void read(int &k){
 8     k=0; int f=1; char c=getchar();
 9     while(c<0||c>9)c==-&&(f=-1),c=getchar();
10     while(0<=c&&c<=9)k=k*10+c-0,c=getchar();
11     k*=f;
12 }
13 void swap_a(int x,int y){for (int i=1;i<=n+1;i++) swap(a[x][i],a[y][i]);}
14 bool Gauss(){
15     int now=1;
16     while(now<=n){
17         if (a[now][now]==0){
18             for (int i=now+1;i<=n;i++) if(a[i][now]!=0) {swap_a(i,now); break;}
19             if (a[now][now]==0) return puts("No Solution"),0;
20         } 
21         double tmp=a[now][now];
22         for (int i=1;i<=n+1;i++) a[now][i]=a[now][i]/tmp;  
23         for (int i=1;i<=n;i++){                        
24             if (i==now) continue; double tmp=a[i][now];
25             for (int j=1;j<=n+1;j++) a[i][j]-=a[now][j]*tmp;
26         }
27         now++;
28     }
29     return 1;
30 }
31 int main(){
32     read(n);
33     for (int i=1;i<=n;i++)
34         for (int j=1;j<=n+1;j++) read(x),a[i][j]=x;
35     if (Gauss()) for (int i=1;i<=n;i++) printf("%.2f\n",a[i][n+1]); printf("\n");
36     return 0;
37 } 
View Code

【模板】高斯消元法

标签:getc   wap   技术   pen   name   printf   ace   namespace   mes   

原文地址:http://www.cnblogs.com/DriverLao/p/7978949.html

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