Жадная раскраска с помощью MPI C++
имеется следующий код раскраски графа жадным алгоритмом.
#include<iostream>
#include <vector>
#include <mpi.h>
using namespace std;
int v, n, i, j;
vector<vector<int>> g;
vector<int> col;
bool visit[1001];
int id;
int nproc;
int main(int argc, char** argv)
{
int a, b;
FILE* myfile;
//MPI_Status status;
//MPI_Init(&argc, &argv); // инициализация mpi
//MPI_Comm_rank(MPI_COMM_WORLD, &id); // получение ранга
//MPI_Comm_size(MPI_COMM_WORLD, &nproc); // получение количества процессоров
//printf("Hello From MPI process: %id, Amount: %d");
//MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
if (id == 0)
{
myfile = fopen("1.txt", "r");
fscanf(myfile, "%d%d", &n, &v);
int a, b;
g.resize(n);
col.resize(n);
memset(visit, 0, sizeof(visit));
}
for (i = 0; i < v; i++)
{
fscanf(myfile, "%d%d", &a, &b);
a--; b--;
g[a].push_back(b);
g[b].push_back(a);
}
//int startval = n * id / (nproc);
//int endval = n * (id + 1) / (nproc);
col[0] = 0;
for (i = 1; i < n; i++)
col[i] = -1;
bool* unuse = new bool[n];
for (i = 0; i < n; i++)
unuse[i] = 0;
for (i = 1; i < n; i++)
{
for (j = 0; j < g[i].size(); j++)
if (col[g[i][j]] != -1)
unuse[col[g[i][j]]] = true;
int cr;
for (cr = 0; cr < n; cr++)
if (unuse[cr] == false)
break;
col[i] = cr;
for (j = 0; j < g[i].size(); j++)
if (col[g[i][j]] != -1)
unuse[col[g[i][j]]] = false;
}
//MPI_Reduce(&p, &, 1, MPI_2INT, MPI_MINLOC, MPI_COMM_WORLD);
//MPI_Finalize();
for (i = 0; i < n; i++)
{
printf("Vertex %d is coloured with %d \n", i + 1, col[i] + 1);
}
}
Мне необходимо выполнить распараллеливание между процессами, но с реализацией есть проблемы. Прошу помощи! В данном случае я хочу разделить цикл на части и отдать их каждому процессу. Пытаюсь сделать по аналогии с другими найденными примерами, пока не получается. Я так понимаю, что перед циклами должно быть разделения на части и широковещательная рассылка Bcast, а в конце Reduce(All), где в качестве результата будет массив col.