高斯消元模板

typedef int Matrix[maxn][maxn];

int gcd(int a,int b)

{

    return b==0?a:gcd(b,a%b);

}

int lcm(int a,int b)

{

    return  a/gcd(a,b)*b;

}

int gauss(Matrix A,int n,int m)

{

    int row,col;

    for(row=0,col=0; row<n&&col<m; row++,col++)

    {

        int r=row;

        for(int i=row+1; i<n; i++)

            if(abs(A[i][col])>abs(A[r][col])) r=i;

        if(r!=row) for(int j=0; j<=m; j++) swap(A[r][j],A[row][j]);

        if(A[row][col]==0)

        {

            row--;

            continue;

        }

        for(int k=row+1; k<n; k++)//消元过程

            if(A[k][col])

            {

                int LCM=lcm(abs(A[k][col]),abs(A[row][col]));

                int ra=LCM/abs(A[k][col]);

                int rb=LCM/abs(A[row][col]);

                if (A[k][col]*A[row][col]<0) rb=-rb;

                for(int j=col; j<=m; j++)

                {

                    A[k][j]=A[k][j]*ra-A[row][j]*rb;

                }

            }

    }

    for(int i=row; i<n; i++)//无解情况

        if(A[i][m]) return -1;

    if(row<m) return 0;//多解

    for(int i=m-1; i>=0; i—)//回代过程

    {

        for(int j=i+1; j<m; j++)

        {

            A[i][m]-=A[j][m]*A[i][j];

        }

        A[i][m]/=A[i][i];

    }

    return 1;

}

你可能感兴趣的:(模板)