这个就是线代嘛。。。。。。。。。。
高斯消元。。。。没太多说的。。。。。。。。
代码转自别人。主要是想记录一下做法。。。。。。
http://blog.csdn.net/u012936765/article/details/47065705
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
const int N=510,M=1050;
#define eps 1e-7
double A[M][N];
double x[N];
int Gauss(int equ,int var)
{
int row,col;
for(row=0,col=0;col<var&&row<equ;col++,row++)
{
int max_r=row;
for(int i=row+1;i<equ;i++)
{
if(fabs(A[i][col])>fabs(A[max_r][col]))
{
max_r=i;
}
}
if(max_r!=row)
{
for(int j=col;j<var+1;j++)
swap(A[row][j],A[max_r][j]);
}
if(fabs(A[row][col])<eps)
{
row--;continue;
}
for(int i=row+1;i<equ;i++)
{
if(fabs(A[i][col])<eps)continue;
for(int j=col+1;j<var+1;j++)
{
A[i][j]=(A[i][j]*A[row][col]-A[i][col]*A[row][j])/A[row][col];
}
A[i][col]=0;
}
}
for(int i=row;i<equ;i++)
{
if(fabs(A[i][col])>eps)return -1;
}
if(row<var)return 0; //线代里面的,,,,增广矩阵的秩更大
for(int i=var-1;i>=0;i--)
{
double tmp=0;
for(int j=i+1;j<var;j++)
{
tmp+=A[i][j]*x[j];
}
x[i]=(A[i][var]-tmp)/A[i][i];
}
return 1;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
for(int j=0;j<=n;j++)
scanf("%lf",&A[i][j]);
}
int ans=Gauss(m,n);
if(ans==-1)
printf("No solutions\n");
else if(ans==0)
printf("Many solutions\n");
else {
for(int i=0;i<n;i++){
int p=x[i]+eps;
printf("%d\n",p);
}
}
return 0;
}