Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Graph::Prim_matrix()
- {
- Edge *edg = new Edge[edges]; // posortowana rosnąco wzg wag tablica krawędzi
- Edge *mst = new Edge[vertices-1]; // krawędzie MST
- int mst_i = 0; // indeks tablicy mst
- int edg_i = 0,
- vert = first_vert;
- bool *processed = new bool[vertices]; // tablica przetworzonych wierzcholkow
- for (int i = 0; i < vertices; i++)
- processed[i] = false; // zaden nie jest przetworzony
- processed[vert] = true; // tylko pierwszy
- for (int i = 0; i < vertices - 1; i++)
- {
- for (int j = 0; j < vertices; j++)
- {
- if (matrix->tab[vert][j] >= 0 && !processed[j])
- {
- edg[edg_i].first_vert = vert;
- edg[edg_i].second_vert = j;
- edg[edg_i].weight = matrix->tab[vert][j];
- edg[edg_i].processed = false;
- edg_i++;
- }
- }
- //cout << "no:\n";
- //for (int i = 0; i < edges; i++)
- // if(!edg[i].processed)
- // cout << edg[i].first_vert << "-" << edg[i].second_vert << ": " << edg[i].weight <<"\n";
- edg->quickSort(edg, 0, edges);
- //cout << "sorted:\n";
- //for (int j = 0; j < edges; j++)
- // if (!edg[j].processed)
- // cout << edg[j].first_vert << "-" << edg[j].second_vert << ": " << edg[j].weight << "\n";
- for (int k = 0; k < edges; k++)
- {
- if (!edg[k].processed && !(processed[edg[k].first_vert] && processed[edg[k].second_vert]))
- {
- mst[mst_i] = edg[k];
- edg[k].processed = true;
- vert = edg[k].second_vert;
- processed[edg[k].first_vert] = true;
- processed[edg[k].second_vert] = true;
- mst_i++;
- break;
- }
- }
- //cout << "processed: \n";
- //for (int i = 0; i < vertices - 1; i++)
- //{
- // printf("%2d|%2d\n",i, processed[i]);
- //}
- }
- cout << "Algorytm Prima - Macierzowo: \n";
- cout << " EDGE : WEIGHT\n";
- int sum = 0;
- for (int i = 0; i < vertices - 1; i++)
- {
- printf("(%2d-%-2d) : %2d\n", mst[i].first_vert, mst[i].second_vert, mst[i].weight);
- sum += mst[i].weight;
- }
- cout << " Sum = " << sum << "\n\n";
- delete[] edg;
- delete[] mst;
- delete[] processed;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement