Program to multiply two nXn matrix using indirect scheduling in two dimensional matrix

```#include<stdio.h>
#include \"shared.h\"
#include \"forkjoin.h\"

int main()
{

int i, j, k, n, pid, nproc, **a, **b, **c;
int m=0, shmidc[10], sh6;
int *ival, *jval, *kval, sh, sh2, sh3, sh4, sh5, shmid[10], shmidb[10];

printf(\"Enter the size for the matrix :: \");
scanf(\"%d\",&n);

*a=(int *)create_memory(sizeof(int)*n, &sh);
for(i=0;i<n;i++)
a[i]=(int *)create_memory(n*2, &shmid[i]);

b=(int **)create_memory(n*sizeof(int),&sh2);
for(i=0;i<n;i++)
b[i]=(int *)create_memory(n*2, &shmidb[i]);

c=(int **)create_memory(n*2,&sh3);
for(i=0;i<n;i++)
c[i]=(int *)create_memory(n*2,&shmidc[i]);

ival=(int *)create_memory(n*n*n*2, &sh4);
jval =(int *)create_memory(n*n*n*2, &sh5);
kval =(int *)create_memory(n*n*n*2, &sh6);

printf(\"\\nEnter the value of first matrix\\n\");

for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf(\"Enter the value of a[%d][%d] :: \",i+1,j+1);
scanf(\"%d\",&a[i][j]);
}
}

printf(\"\\nEnter the value of second matrix\\n\");

for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf(\"Enter the value of b[%d][%d] :: \",i+1,j+1);
scanf(\"%d\",&b[i][j]);
}
}

m=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
for(k=0;k<n;k++)
{
ival[m]=i;
jval[m]=j;
kval[m]=k;
m++;
}
}
}

printf(\"Enter the total number of processes :: \");
scanf(\"%d\",&nproc);

pid=create_process(&nproc);
for(m=pid;m<n*n*n;m+=nproc)
{
i=ival[m];
j=jval[m];
k=kval[m];
c[i][j] += a[i][k]*b[k][j];
}
join_process(&nproc,&pid);

printf(\"\\nThe resultant matrix is\\n\");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf(\"%d\\t\",c[i][j]);
}
printf(\"\\n\");
}
for(i=0;i<n;i++)
{
cleanup_memory(&shmid[i]);
cleanup_memory(&shmidc[i]);
cleanup_memory(&shmidb[i]);
}
cleanup_memory(&sh);
cleanup_memory(&sh2);
cleanup_memory(&sh3);
cleanup_memory(&sh4);
cleanup_memory(&sh5);
cleanup_memory(&sh6);
printf(\"\\n\");
return 0;

}

/* OUTPUT */
Enter the size for the matrix :: 2

Enter the value of first matrix
Enter the value of a[1][1] :: 1
Enter the value of a[1][2] :: 2
Enter the value of a[2][1] :: 3
Enter the value of a[2][2] :: 4

Enter the value of second matrix
Enter the value of b[1][1] :: 5
Enter the value of b[1][2] :: 6
Enter the value of b[2][1] :: 7
Enter the value of b[2][2] :: 8
Enter the total number of processes :: 2

The resultant matrix is
19      22
43      50
```