rootUser

mcm

Aug 6th, 2016
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.97 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<limits.h>
  4. void input();
  5. int Matrix_Chain_Order(int [],int);
  6. void Print_Optimal_Parents(int [100][100], int, int);
  7.  
  8. int i,j,k,l,n,q,val,length,numofmatrix,firstValue,count=1;
  9. int mat[100], m[100][100],s[100][100],p[100];
  10. void input()
  11. {
  12.     printf("Number of matrix:");
  13.     scanf("%d", &numofmatrix);
  14.     int index = 0;
  15.     for(i=1; i<=(numofmatrix*2); i=i+2)
  16.     {
  17.  
  18.         printf("MATRIX A%d\n", count++);
  19.         printf("number of row:");
  20.         scanf("%d",&mat[i]);
  21.         printf("number of column:");
  22.         scanf("%d", &mat[i+1]);
  23.  
  24.     }
  25.  
  26.     firstValue = mat[1];
  27.  
  28.     for(i=2; i<=(numofmatrix*2); i=i+2)
  29.     {
  30.         index = index+1;
  31.         p[index] = mat[i];
  32.     }
  33.  
  34.     p[0] = firstValue;
  35.  
  36.     length = index;
  37.     printf("\nElements in P array: ");
  38.     for(i=0; i<=length; i++)
  39.     {
  40.         printf("%d ", p[i]);
  41.     }
  42. }
  43. int Matrix_Chain_Order(int p[], int length)
  44. {
  45.     n = length;
  46.     for (i=1; i<=n; i++)
  47.     {
  48.         m[i][i] = 0;
  49.     }
  50.  
  51.  
  52.     for (l=2; l<=n+1; l++)
  53.     {
  54.         for (i=1; i<=n-l+1; i++)
  55.         {
  56.             j = i+l-1;
  57.             m[i][j] = 1000000;
  58.             for (k=i; k<=j-1; k++)
  59.             {
  60.                 q = (m[i][k] + m[k+1][j])+ (p[i-1] * p[k] * p[j]);
  61.  
  62.                 if (q<m[i][j])
  63.                 {
  64.                     m[i][j] = q;
  65.                     s[i][j] = k;
  66.                 }
  67.  
  68.             }
  69.         }
  70.     }
  71.  
  72.     return m[i][j];
  73. }
  74.  
  75. void Print_Optimal_Parents(int s[100][100],int i, int j)
  76. {
  77.     if(i==j)
  78.     {
  79.         printf(" A%d",i);
  80.  
  81.     }
  82.     else
  83.     {
  84.         printf("( ");
  85.         Print_Optimal_Parents(s,i,s[i][j]);
  86.         Print_Optimal_Parents(s,s[i][j]+1,j);
  87.         printf(" )");
  88.     }
  89. }
  90.  
  91. int main()
  92. {
  93.     input();
  94.     val = Matrix_Chain_Order(p,length);
  95.     printf("\n\nCost: %d", val);
  96.     printf("\n\nOptimal Path:\n ");
  97.     Print_Optimal_Parents(s,1,length);
  98.     printf("\n");
  99.     return 0;
  100. }
Add Comment
Please, Sign In to add comment