高斯消元模板

高斯消元模板

标签(空格分隔): 模板大作战


整数类型高斯消元

返回值的情况

  1. -2表示有浮点数解,但无整数解
  2. -1表示无解
  3. 0表示唯一解
  4. 大于0表示无穷解,并返回自由变元的个数

其他说明

有equ个方程,var个变元。
增广矩阵行数为equ,分别为0到equ-1,列数为var+1,分别为0到var.

#include <algorithm>
#include <cstring>
#include <cmath>
#define nmax 100
using namespace std;
int a[nmax][nmax];
int x[nmax];
int free_x[nmax];
int gcd(int a,int b){
    if(!b) return a; else return gcd(b,a%b);
}
int lcm(int a,int b){
    return a/gcd(a,b)*b;
}
int Gauss(int equ,int var){
    int k,max_r,col = 0,ta,tb;
    int LCM,temp,num = 0,free_index;
    for(int i=0;i<=var;i++){
        x[i]=0;
        free_x[i]=true;
    }
    for(k = 0;k < equ && col < var;k++,col++){
        max_r=k;
        for(int i=k+1;i<equ;i++){
            if(abs(a[i][col])>abs(a[max_r][col])) max_r=i;
        }
        if(max_r!=k){
  // 与第k行交换.
            for(int j=k;j<var+1;j++) swap(a[k][j],a[max_r][j]);
        }
        if(a[k][col]==0){
  // 说明该col列第k行以下全是0了,则处理当前行的下一列.
            free_x[num++] = col;
            k--;
            continue
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值