Pagini recente » Cod sursa (job #1750676) | Cod sursa (job #2253556) | Cod sursa (job #2984744) | Cod sursa (job #722319) | Cod sursa (job #713642)
Cod sursa(job #713642)
#include<cstdio>
#define eps 0.0000000001
#define nmax 305
using namespace std;
double x[nmax][nmax], *a[nmax],*aux;
int n,m,next[nmax],prev[nmax],OK=1,l,sol[nmax];
void citire()
{
int i,j;
freopen("gauss.in","r",stdin);
freopen("gauss.out","w",stdout);
scanf("%d%d", &n, &m);
for(i=1;i<=n;i++)
{
a[i]=x[i];
for(j=1;j<=m+1;j++)
scanf("%lf", &a[i][j]);
}
}
void initializare()
{
int i;
for(i=1;i<=m+1;i++)
{
next[i]=i+1;
prev[i]=i-1;
}
next[0]=1;
prev[m+2]=m+1;
}
int valid()
{
int c,j,k;
double val;
for(c=next[0];c<=m+1;c=next[c])
if(a[l][c]<=-eps||a[l][c]>=eps)
break;
if(c==(m+2))
{
aux=a[l];
a[l]=a[n];
a[l]=aux;
n--;
l--;
return 1;
}
if(c==(m+1))
return 0;
val=a[l][c];
for(j=c;j<=m+1;j=next[j])
a[l][j]/=val;
for(j=1;j<=n;j++)
if(j!=l)
{
val=a[j][c];
if(val<=eps&&val>=-eps)
continue;
for(k=c;k<=m+1;k=next[k])
a[j][k]=a[j][k]-val*a[l][k];
}
sol[c]=l;
next[prev[c]]=next[c];
prev[next[c]]=prev[c];
return 1;
}
void rezolvare()
{
for(l=1;l<=n;l++)
{
if(valid())
continue;
OK=0;
return;
}
}
void afisare()
{
int i;
if(OK==1)
for(i=1;i<=m;i++)
{
if(sol[i]!=0)
printf("%.8lf ", x[sol[i]][m+1]);
else
printf("0.00000000 ");
}
else
printf("Imposibil");
}
int main()
{
citire();
initializare();
rezolvare();
afisare();
return 0;
}