#include<stdio.h>
#include<math.h>
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

Gaussdiedai(n,a,x)
     int n;
     double *a,*x;
{
     int i,j,k,r,l,c;
     double m;
     int cc[3];
     for(j=0;j<n;j++)
       cc[j]=j;
     for(k=0;k<n-1;k++)
     {
       m=0;
       for(i=k;i<n;i++)
          for(j=k;j<n;j++)
             if(fabs(a[i*(n+1)+j])>m)
             {
               r=i;c=j;
               m=fabs(a[i*(n+1)+j]);
             }
       if(r>k)
          for(j=k;j<n+1;j++)
          {
             m=a[k*(n+1)+j];
             a[k*(n+1)+j]=a[r*(n+1)+j];
             a[r*(n+1)+j]=m;
          }
       if(c>k)
       {
          for(i=0;i<n;i++)
          {
             m=a[i*(n+1)+k];
             a[i*(n+1)+k]=a[i*(n+1)+c];
             a[i*(n+1)+c]=m;
             l=cc[k];
             cc[k]=cc[c];
             cc[c]=l;
          }
       }
       for(i=k+1;i<n;i++)
       {
          m=a[i*(n+1)+k]/a[k*(n+1)+k];
          for(j=k+1;j<n+1;j++)
             a[i*(n+1)+j]-=m*a[k*(n+1)+j];
       }
     }
     x[cc[n-1]]=a[(n-1)*(n+1)+n]/a[(n-1)*(n+1)+(n-1)];
     for(i=n-2;i>=0;i--)
     {
       m=a[i*(n+1)+n];
       for(j=i+1;j<n;j++)
          m-=a[i*(n+1)+j]*x[cc[j]];
       x[cc[i]]=m/a[i*(n+1)+i];
     }
}

 

main()
{
    double a[3][4]={{0.001000,2.000,3.000,1.000},{-1.000,3.712,4.623,2.000},{-2.000,1.072,5.643,3.000}},x[3];
    int i;
    Gaussdiedai(3,a,x);
    for(i=0;i<3;i++)
       printf("%f\n",x[i]);
}