zoukankan      html  css  js  c++  java
  • ZOJ 3645高斯消元

    高斯消元是求方程组解的一般方法:

    它在求矩阵的逆矩阵的时候也最方便的方法

    View Code
    #include <stdio.h>
    #include <cstring>
    #include <stdlib.h>
    #include <math.h>
    #include <iostream>
    using namespace std;
    #define max(a,b) ((a) > (b) ? (a) : (b))
    #define min(a,b) ((a) < (b) ? (a) : (b))
    #define eps 1e-6
    const int Max = 19;
    
    double mat[Max][Max];
    double c[Max][Max];
    double ans[Max];
    
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--){
            for(int i=0;i<12;i++){
                for(int j=0;j<12;j++){
                    scanf("%lf",&mat[i][j]);
                }
            }
            for(int i=0;i<12;i++)
                c[i][11] = mat[i][11]*mat[i][11];
            for(int i=0;i<12;i++){
                for(int j=0;j<11;j++){
                    c[i][j] = -2*mat[i][j];
                    c[i][11] -= mat[i][j]*mat[i][j];
                }
            }
            for(int i=0;i<11;i++){
                for(int j=0;j<12;j++){
                    c[i][j]-=c[i+1][j];
                }
            }
            for(int i=0;i<11;i++){
                if(c[i][i] == 0){
                    for(int j=i+1;j<11;j++){
                        if(c[j][i] != 0){
                            for(int k=0;k<12;k++)
                                swap(c[i][k],c[j][k]);
                            break;
                        }
                    }
                }
                for(int j=i+1;j<11;j++){
                    double be = c[j][i]/c[i][i];
                    if(be == 0)
                        continue;
                    for(int k=i;k<12;k++){
                        c[j][k] -= c[i][k]*be;
                    }
                }
            }
            ans[10] = c[10][11]/c[10][10];
            for(int i=9;i>=0;i--){
                ans[i]=c[i][11];
                for(int j=i+1;j<11;j++){
                    ans[i]-=c[i][j]*ans[j];
                }
                ans[i] /= c[i][i];
            }
            for(int i=0;i<10;i++){
                printf("%.2lf ",ans[i]+eps);
            }
            printf("%.2lf\n",ans[10]+eps);
        } 
        return 0;
    }
  • 相关阅读:
    POJ 1659 Frogs' Neighborhood
    zoj 2913 Bus Pass(BFS)
    ZOJ 1008 Gnome Tetravex(DFS)
    POJ 1562 Oil Deposits (DFS)
    zoj 2165 Red and Black (DFs)poj 1979
    hdu 3954 Level up
    sgu 249 Matrix
    hdu 4417 Super Mario
    SPOJ (BNUOJ) LCM Sum
    hdu 2665 Kth number 划分树
  • 原文地址:https://www.cnblogs.com/gray035/p/3008290.html
Copyright © 2011-2022 走看看