#include <stdio.h>
#include <mpi.h>
#include <string.h>
main(int argc, char *argv[]){
int i,myid, np, ierr,lnbr, rnbr,place;
char sbuff[10],rbuff[10],store[4][10];
MPI_Status status;
ierr=MPI_Init(&argc, &argv);
if (ierr != MPI_SUCCESS) {
fprintf(stderr,"MPI init error");
exit(1);
}
MPI_Comm_size(MPI_COMM_WORLD, &np);
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
switch ( myid) {
case 0: strcpy(sbuff,"con");break;
case 1: strcpy(sbuff,"cat");break;
case 2: strcpy(sbuff,"tin");break;
case 3:strcpy(sbuff,"ate");break;
}
lnbr = (myid+np-1)%np;
rnbr = (myid+1)%np;
place=myid;
strcpy(store[place],sbuff);
for (i=0;i<np-1;i++) {
MPI_Send(sbuff,4,MPI_CHAR,rnbr,0,MPI_COMM_WORLD);
MPI_Recv(rbuff,4,MPI_CHAR,lnbr,0,MPI_COMM_WORLD,&status);
place=(place+np-1)%np;
strcpy(sbuff,rbuff);
strcpy(store[place],sbuff);
}
for (i=1;i<np;i++)strcat(store[0],store[i]);
printf("-------------------\nmy id is %i\nThe string is %s\n",myid,store[0]);
MPI_Finalize();
}