//Author Antonio-Gabriel Sturzu #include #include #include #include #define inf 50000001 int main(int argc,char *argv[]) { int rc,numtasks,rank,**m,n,*line,dim,next=0,strip,*d,minl,ming,iminl,iming,prod; int i,j,temp; char *viz; double time1,time2; FILE *f; MPI_Status status; //MPI Initialization rc = MPI_Init(&argc,&argv); if (rc != MPI_SUCCESS) { printf ("Error starting MPI program. Terminating.\n"); MPI_Abort(MPI_COMM_WORLD, rc); } MPI_Comm_size(MPI_COMM_WORLD,&numtasks); MPI_Comm_rank(MPI_COMM_WORLD,&rank); //Reading from file is done by process 0 if(rank==0) { f=fopen("dijkstra.in","r"); fscanf(f,"%i",&n); } //Broadcast n's value to all processes MPI_Bcast(&n,1,MPI_INT,0,MPI_COMM_WORLD); dim=n/numtasks; strip=dim; if(rank==numtasks-1 && n%numtasks!=0) dim=n-dim*(numtasks-1); //Partition the data m=(int **) calloc(n*dim,sizeof(int *)); for(i=0;i1) MPI_Send(&line[next],n-next,MPI_INT,numtasks-1,1,MPI_COMM_WORLD); } } else for(i=0;i=rank*dim && iming<(rank+1)*dim) viz[iming-rank*dim]=1; } else { if(iming>=rank*strip && iming