Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using std::cout;
- using std::cin;
- struct graph
- {
- int n; //номер вершины
- int weight; //вес вершины
- graph* next;
- };
- void vvodgraph(graph*& head, int l)
- {
- int i, k;
- head = NULL;
- cout << "Введите количество инцидентных вершин для вершины " << l << "\n";
- cin >> k;
- cout << "Введите номер вершины и его вес.\n";
- for (i = 0; i < k; i++)
- {
- graph* q = new graph;
- cin >> q->n >>q->weight;
- q->next = head;
- head = q;
- }
- }
- int kolvomin(graph* head)
- {
- graph* q = head;
- int k = 0, min;
- min = q->weight;
- q = q->next;
- while (q != NULL)
- {
- if (q->weight <= min)
- {
- min = q->weight;
- k++;
- }
- q = q->next;
- }
- return k;
- }
- graph** ostov(graph** v, int*& color, int n)
- {
- graph** ost = new graph * [n];
- int i, min, k, j;
- for (i = 0; i < n; i++)
- {
- graph* q = v[i];
- k = kolvomin(v[i]);
- graph** m = new graph*[k];
- min = q->weight;
- //q = q->next;
- j = 0;
- ost[i] = NULL;
- graph* miin = q;
- while (q != NULL)
- {
- if (q->weight <= min)
- {
- min = q->weight;
- miin = q;
- }
- q = q->next;
- }
- q = v[i];
- while (q != NULL)
- {
- if (q->weight == miin->weight)
- {
- m[j] = q;
- j++;
- }
- q = q->next;
- }
- for (j = 0; j < k; j++)
- {
- if (color[i] != color[m[j]->n-1])
- {
- graph* l = new graph;
- l->n = m[j]->n;
- l->weight = m[j]->weight;
- l->next = ost[i];
- ost[i] = l;
- color[m[j]->n - 1] = color[i];
- }
- }
- }
- return ost;
- }
- void showgraph(graph* head)
- {
- graph* q = head;
- while (q != NULL)
- {
- cout << q->n << " ";
- q = q->next;
- }
- cout << "\n";
- }
- void deletegraph(graph*& head)
- {
- graph* q = head;
- while (head != NULL)
- {
- q = head;
- head = head->next;
- delete q;
- }
- }
- int main()
- {
- setlocale(LC_ALL, "RU");
- int i, n;
- cout << "Граф задается в виде структуры смежности.\n";
- cout << "Введите количество вершин в графе: \n";
- cin >> n;
- graph** v = new graph*[n];
- for (i = 0; i < n; i++)
- vvodgraph(v[i], i + 1);
- int* color = new int[n];
- for (i = 0; i < n; i++)
- color[i] = i;
- graph** ost = ostov(v, color, n);
- for (i = 0; i < n; i++)
- showgraph(ost[i]);
- for (i = 0; i < n; i++)
- deletegraph(v[i]);
- delete[]v;
- for (i = 0; i < n; i++)
- deletegraph(ost[i]);
- delete[]ost;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment