code:
const int N=110;
const double eps=1e-7;
int n;
double a[N][N];
inline bool zero(double x){
return fabs(x)<eps;
}
int gauss(){
for(int i=1;i<=n;i++){
int aim=i;
//找出 i 列中,未确定主元的行中的最大行
for(int j=1;j<=n;j++){
//判断是否确定主元
if(j<i&&!zero(a[j][j]))
continue;
if(fabs(a[j][i])>fabs(a[aim][i]))
aim=j;
}
if(zero(a[aim][i]))
continue;
//交换aim行和i行
for(int j=1;j<=n+1;j++)
swap(a[aim][j],a[i][j]);
//a[i][i] 位置置为1
for(int j=n+1;j>=i;j--)
a[i][j]/=a[i][i];
for(int j=1;j<=n;j++){//第i列出来第i行,全部消为0
if(j==i)
continue;
double t=a[j][i]/a[i][i];
for(int k=i;k<=n+1;k++)
a[j][k]-=a[i][k]*t;
}
}
//判断解
int ret=1;
for(int i=1;i<=n;i++){
if(zero(a[i][i])&&!zero(a[i][n+1])){
ret=0;
break;
}
if(zero(a[i][i]))
ret=2;
}
return ret;
}