Ругается на сортировку - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Ругается на сортировку, подскажите в чем проблема, пофиксить не получилось...

*c пишит что не определен, пытался задавать int *c; )a - на скобке выдает что требуется выражение, на a выдает что нету ; хотя вроде все стоит, и также ругается на d....

int cmp(const void *a, const void *b) { edge *c = (edge*)a, *d = (edge*)b; return c->w - d->w;
#include 
#include 
#include 
using namespace std;
 
int NV;                 // Количество вершин в графе
int NE;                 // Количество ребер в графе
int edge;
#define MAX_NODES 100  // Максимальное количество вершин
#define MAX_EDGES 10   // Максимальное количество ребер в графе
 
struct edge_t {
    int n1, n2;  // направление
    int w;      // вес ребра
} edges[MAX_EDGES];  // Ребра графа
 
int nodes[MAX_NODES];  // Вершины графа.  Значение - "верхняя вершина"

int last_n;
 
// Функция получает цвет вершины n-й по порядку.
// если nodes[n] < 0, то вершина n имеет цвет nodes[n]
// если nodes[n] >= 0, то вершина n имеет цвет такой же, 
// как и вершина с номером nodes[n]
int getColor(int n) {
    int c;
    if (nodes[n]<0)
        return nodes[last_n = n];
    c = getColor(nodes[n]);
    nodes[n] = last_n;
    return c;
}
int cmp(const void *a, const void *b) {  // Функция "сравнения" двух ребер, используемая для сортировки
    edge *c = (edge*)a, *d = (edge*)b;
    return c->w - d->w;
}
int main() {
    int i,N;
    // Считываем вход
    scanf("%d %d", &NV, &NE);
    for (i = 0; i < N; i++) nodes[i] = -1 - i;
 
    for (i = 0; i < NE; i++)
        scanf("%d %d %d", &edges[i].n1, &edges[i].n2, &edges[i].w);
 
    // Алгоритм Крускала
 
    // Сортируем все ребра в порядке возрастания весов
    qsort(edges, NE, sizeof(edge_t), cmp);
 
    for (i = 0; i < NE; i++) { // пока не прошли все ребра
        int c2 = getColor(edges[i].n2);
        if (getColor(edges[i].n1) != c2) {
            // Если ребро соединяет вершины различных цветов-мы его добавляем
            // и перекрашиваем вершины
            nodes[last_n] = edges[i].n2;
            printf("%d %d %d\n", edges[i].n1, edges[i].n2, edges[i].w);
        }
    }
    return 0;
}

Решение задачи: «Ругается на сортировку»

textual
Листинг программы
int i,N;
    // Считываем вход
    scanf("%d %d", &NV, &NE);
    for (i = 0; i < N; i++) nodes[i] = -1 - i;

Объяснение кода листинга программы

  1. Входные данные представлены двумя числами NV и NE, которые считываются с помощью функции scanf.
  2. Переменная NV содержит количество вершин в неориентированном графе.
  3. Переменная NE содержит количество ребер в графе.
  4. Создается массив nodes размером N, где N - количество вершин в графе.
  5. Каждая вершина в массиве nodes инициализируется значением -1 - i, где i - номер вершины в графе.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы