#include
#include
#include
#include
main()
{
  clrscr();
  int i,j,u,k,n,T=0;
  int y[10],y1[10],z=0,zl=0,l=0,w=0,A[10],con=0,NT=1,n1;
  float c[10][10],b[10][10],a[10][10],B[10][10];
  float s[10][10],t[10][10],a1[10][10];
  printf("\t bode matrix ra vared konid:");
  scanf("%d",&n);
   printf("\n\t A[I][J]  : ");
  for(i=1;i<=n;i++)
   for(j=1;j<=n;j++) {
       gotoxy(3+5*(j-1),i+3);
       scanf("%f",&a[i-1][j-1]);
       a1[i-1][j-1]= a[i-1][j-1] ;
       if(i==j) b[i-1][j-1]=1;
       else b[i-1][j-1]=0;
       y1[i-1]=0; A[i-1]=i-1;
       y[i-1]=0;
      }
   n-=1;
      for(i=0;i<=n;i++)
      if(a[i][i]==0) con++;
      if(con>=n-1){
       while(NT){
for(i=0;i<=n;i++){
if(a[i][i]==0) {
   for(j=0;j<=n;j++)
   if(i<=n-1) {
        T=a[j][i];
        a[j][i]=a[j][i+1];
        a[j][i+1]= T;
        T=A[i];
        A[i]=A[i+1];
        A[i+1]=T;
  }
   else if(i==n){
   T=a[j][i];
   a[j][i]=a[j][0];
   a[j][0]= T;
   T=A[i];
   A[i]=A[0];
   A[0]=T;
   }
    }}
        con=0;
        for(i=0;i<=n;i++)
        if(a[i][i]==0) con++;
        if(con>=1)  continue;
        else NT=0;
       }
  goto loop1;
 }
   else
  while(z==0){  // start while
       loop1:
       for(i=0;i<=n;i++)
       for(j=0;j<=n;j++)
    s[i][j]=0;
   for(i=0;i<=n;i++)
    for(j=0;j<=n;j++){
       s[i][l]+=b[i][j]*a[j][l];
       if(i==j) t[i][j]=1;
        else t[i][j]=0;
        c[i][j]=0;
        }
    if((s[l][l]==0)&&(l  y[l]=1;
  y1[l]++;
  if(y1[l]==n+2){
   printf("****(DETERMINAN=0)****");
   getch();
   exit(0);
   }
  if(zl==0) {
       l++;
       continue;
      }
      else goto loop2;
  }
else if((s[l][l]==0)&&(l==n)){
        for(i=0;i<=n;i++)
        for(j=0;j<=n;j++){
     if(i==j) b[i][j]=1;
     else b[i][j]=0; }
       for(i=0;i<=n;i++)
       {
       y[i]=0;
       y1[i]++;
       if(y1[l]==n+2){
        printf("****NO****");
        getch();
        exit(0);
       }
       }
  if(T==0){    T=1;   continue; }
  else {
        if(w<=n-2) w++;
        else w=0;
        goto loop2;
       }
 }
   for(i=0;i<=n;i++){
      if(i==l) t[i][l]=1/s[i][l];
      else if(s[i][l]==0) t[i][l]=s[i][l];
      else t[i][l]=(s[i][l]/s[l][l])* -1;
      }
   for(i=0;i<=n;i++)
    for(j=0;j<=n;j++)
     for(k=0;k<=n;k++)
   c[j][i]+=t[j][k]*b[k][i];
   for(i=0;i<=n;i++){
       for (j=0;j<=n;j++)
       b[i][j]=c[i][j];
       s[i][j]=0;
      }
  printf("\n\n");
  loop2:
     if((l<=n)&&(zl!=1))    l++;
  if((l>n)||(zl==1)){
       zl=1;
       for(i=w;i<=n;i++)
       if(y[i]==1){
      y[i]=0;
      l=i;
      goto loop1;
     }
       z=1;
      }
  }//****Eof while
   for(i=0;i<=n;i++)
     for(j=0;j<=n;j++)
     if(A[i]==i)    B[i][j]=b[i][j];
     else {
      n1=A[i];
      B[n1][j]=b[i][j];
   }
  for(i=0;i<=n;i++)
   for(j=0;j<=n;j++){
       b[i][j]=B[i][j];
       c[i][j]=0;
      }
       printf("\n");
     for(i=0;i<=n;i++)
     for(j=0;j<=n;j++)
     for(k=0;k<=n;k++)
      c[i][j]+=a1[j][k]*b[k][i];
     printf("***  hasel zarbe matrix varoon dar khode matrix ** \n\n");
     for(i=0;i<=n;i++) {
    for(j=0;j<=n;j++)
    printf("%5.2f",c[i][j]);
    printf("\n");
         }
    printf(" \n*** varoon e matrix ***   \n\n");
    for(i=0;i<=n;i++)
    {
       for(j=0;j<=n;j++)
       printf("%5.2f", b[i][j] );
       printf("\n");
     }
getch();
}