Can somebody help with this code:
Task: Square matrix clockwise rotation using 2*N Threads 1)first quater i.e N/2 (4,7)->(11,6) ..2) second quater (11,16)->(10,13),so on and so forth...
Thanks,
Mozala
Input matrix 4x4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Matrix 4x4 after rotation:
13 2 3 1
5 10 6 8
9 11 7 12
16 14 15 4
Code:
#include <pthread.h>
#include <iostream>
#define MAX_ROW 10
#define MAX_COL 10
using namespace std;
struct matrix_index_type
{
int row;
int col;
};
struct matrix_index_type matrix_index[MAX_ROW][MAX_COL];
int aux[MAX_COL];
int matrix[MAX_ROW][MAX_COL];
/*-------------------Read Matrix------------------*/
void read_matrix(int matrix[][MAX_COL])
{
int i,j;
for(i = 0; i < MAX_ROW; i ++)
{
for(j = 0; j < MAX_COL; j ++)
{
cin<<matrix[i][j];
}
}
}
/*--------------PRINT OUT MATRIX-------------------*/
output_matrix(int matrix[][MAX_COL])
{
int i,j;
for(i = 0; i < MAX_ROW; i ++)
{
for(j = 0; j < MAX_COL; j ++)
{
cout<<matrix[i][j]<<endl;
}
cout<<"\n";
}
cout<<"Finished printing.."<<endl;
}
/*---------------------Rotate---------------------*/
void *rotate( void * index)
{
int i,j,x;
struct matrix_index_type *pindex;
pindex = (struct matrix_index_type *) index;
i = pindex->row;
j = pindex->col;
aux[MAX_COL]=matrix[i][j];
pthread_mutex_unlock(MD[j])
aux[MAX_COL]=matrix[i][j];
pthread_mutex_unlock(MD[i]);
pthread_mutex_lock(SD[j])
for (x=0;x<MAX_COL;x++)
{
pthread_exit(NULL);
}
}
/*-------------------MAIN PROGRAM-----------------*/
int main()
{
int Imatrix[][MAX_COL]={1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16};
int i, j;
int index[MAX_ROW][MAX_COL];
pthread_t ptd[MAX_ROW][MAX_COL];
read_matrix(Imatrix);
cout<<"Input matrix is:\n"<<endl;
output_matrix(Imatrix);
for(i = 0; i < MAX_ROW; i ++)
{
for(j = 0; j < MAX_COL; j ++)
{
matrix_index[i][j].row = i;
matrix_index[i][j].col = j;
pthread_create( &ptd[i][j],NULL,rotate, (void*) &matrix_index[i][j]);
}
}
for(i = 0; i < MAX_ROW; i ++)
{
for(j = 0; j < MAX_COL; j ++)
{
pthread_join( ptd[i][j], NULL);
}
}
cout<<"Rotated matrix is:\n";
output_matrix(Imatrix);
}
pthread_mutex_destroy(&mutex);
pthread_exit(NULL);
return 0;
}