第一个点过不去,貌似是因为判断是否多解和无解的地方出了问题??稍作修改即可。。我懒得改了
//Decision's template
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstdlib>
#include<vector>
#include<queue>
#include<stack>
#include<algorithm>
#include<string>
#include<cmath>
#include<map>
#include<set>
using namespace std;
#define DP_maxn 16
#define maxn 100000
#define INF 10000007
#define mod 1000000007
#define mst(s,k) memset(s,k,sizeof(s))
typedef long long ll;
struct Edge{
int from,to,dist;
Edge(int u,int v,int d):from(u),to(v),dist(d){}
};
/*-------------------------------template End--------------------------------*/
double a[200][200],eps = 1e-6;;
int n;
void init()
{
cin>>n;
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=n;j++)
{
cin>>a[i][j];
}
cin>>a[i][n+1];
}
}
bool gauss()
{
int now = 1,to;
double t;
for(int i = 1;i<=n;i++)
{
for(to = now;to<=n;to++) if(fabs(a[to][i])>eps) break;
if(to>n) continue;
if(to!=now) for(int j = 1;j<=n+1;j++)
swap(a[now][j],a[to][j]);
t = a[now][i];
for(int j = 1;j<=n+1;j++) a[now][j] /= t;
for(int j = 1;j<=n;j++)
{
if(j!=now){
t = a[j][i];
for(int k = 1;k<=n+1;k++) a[j][k]-=t*a[now][k];
}
now++;
}
}
for(int i=now;i<=n;i++)
if(fabs(a[i][n+1])>eps)return 0;
return 1;
}
int main()
{
//freopen("std.in","r",stdin);
//freopen("std.out","w",stdout);
init();
if(!guess()) cout<<"No Solution"<<endl;
else {
for(int i = 1;i<=n;i++) printf("%.2f\n",a[i][n+1]);
}
}