正在加载图片...
for(=0,i<row,计+) queens(chessboard, 0) t solutions(solution count, solu if(collides(i, chessboard[, row, col) return false }/*for*/ void eight queens master( int nodes) }/is_safe形 MPI Status status; int active slaves =nodes-I void place queens(int chessboard[, int row int new task NEW TASK f (row > QUEENS) int num solutions 记录当前解 for(i=0; 1<QUEENS; i++) while(active slaves solutions (solution countO MPI Recv(&reply, 1, chessboard o: MPI IN MPI ANY SOURCE, REPLY TAG MPI COMM WORLD, &status); for(col =0; col QUEENS; col++) child status MPI SOURCE: if(is safe(chessboard, row, col)) if(reply ==ACCOMPLISHED) /*在当前位置放置一个 /*从子进程接收并记录解考 皇后 MPI Recv(&num solutions, I 递归放置下一个皇后考 NUM SOLUTIONS TAG row+1) MPI COMM WORLD, }/*if 1/for * 9 /*else * if(num solutions >0 place queens * MPI Recv(solutions solution void sequential eight queens( QUEENS*num solutions, chessboard queens] MPI INT olution count =0 SOLUTIONS TAG14 for (i = 0; i < row; i++) { if (collides(i, chessboard[i], row, col)) return false; } /* for */ return true; } /* is_safe */ void place_queens(int chessboard[], int row) { int i, col; if (row >= QUEENS) { /* 记录当前解 */ for (i = 0; i < QUEENS; i++) { solutions[solution_count][i] = chessboard[i]; } solution_count++; } else { for (col = 0; col < QUEENS; col++) { if (is_safe(chessboard, row, col)) { /* 在当前位置放置一个 皇后 */ chessboard[row] = col; /* 递归放置下一个皇后 */ place_queens(chessboard, row + 1); } /* if */ } /* for */ } /* else */ } /* place_queens */ void sequential_eight_queens() { int chessboard[QUEENS]; solution_count = 0; place_queens(chessboard, 0); print_solutions(solution_count, solutions); } void eight_queens_master(int nodes) { MPI_Status status; int active_slaves = nodes - 1; int new_task = NEW_TASK; int terminate = TERMINATE; int reply; int child; int num_solutions; int seed; while (active_slaves) { MPI_Recv(&reply, 1, MPI_INT, MPI_ANY_SOURCE, REPLY_TAG, MPI_COMM_WORLD, &status); child = status.MPI_SOURCE; if (reply == ACCOMPLISHED) { /* 从子进程接收并记录解 */ MPI_Recv(&num_solutions, 1, MPI_INT, child, NUM_SOLUTIONS_TAG, MPI_COMM_WORLD, &status); if (num_solutions > 0) { MPI_Recv(solutions[solution_ count], QUEENS * num_solutions, MPI_INT, child, SOLUTIONS_TAG
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有