Member 14122005 Ответов: 2

Реализовать алгоритм Прима для создания минимального по стоимости связующего дерева.


С Реализовать алгоритм Прима для создания минимального по стоимости связующего дерева.
#include
#include
int a,b,u,v,n,i,j,ne=1;
int visited[10]={0},min,mincost=0,cost[10][10];

void main()
{
    clrscr();
    cout > n;
    cout > cost[i][j];
    if( cost[i][j]==0 )
       cost[i][j] = 999;
    }  // where is the starting brace ???

    visited[1]=1;
    cout << "\n";
    while( ne < n )
    {
        for( i=1, min=999; i <= n; i++ )
            for( j=1; j <= n; j++ )
                if( cost[i][j] < min )
                    if( visited[i] != 0 )
                    {
                        min=cost[i][j];
                        a=u=i;
                        b=v=j;
                    }

        if( visited[u] == 0 || visited[v] == 0 )
        {
            cout << "\n Edge: " << ne++ << "(" << a << "," << b << ") cost: " << min;
            mincost += min;
            visited[b] = 1;
        }
        cost[a][b] = cost[b][a] = 999;
    }
    cout << "\n Minimun cost= " << mincost;
    getch();
}


Что я уже пробовал:

Кто-нибудь, пожалуйста, объясните эту программу строка за строкой...

Richard MacCutchan

Вам не нужно построчное объяснение, так как первые несколько строк даже не будут компилироваться. Я предлагаю вам начать с изучения ваших заметок или руководства по C++.

Rick York

Использование переменных с именами min или max не очень хорошая идея, потому что есть два часто используемых макроса с этими именами, и вы можете столкнуться с коллизией, приводящей к нарушению кода. Кроме того, даже если вам не нужны фигурные скобки для отдельных операторов, это хорошая идея, чтобы иметь их для повышения ясности кода. Кроме того, они будут там, если/когда вам нужно будет добавить операторы внутри циклов или условных выражений.

Rick York

Почему мы должны тратить время на то, чтобы объяснить вам что-то, когда вы можете потратить то же самое время на изучение этого? Вам нужно поработать с учебником по c++ или найти кого-то, кто готов обучить вас этому языку. Просьба о построчном объяснении вряд ли приведет к нему.

2 Ответов

Рейтинг:
2

OriginalGriff

Вы хоть представляете, как много работы по построчному объяснению кода?
Каждая строка нуждается в пояснении! Например:

int next = r.Next();

Создайте новую переменную под названием "next", которая может содержать целочисленное значение. Из ранее объявленного случайного экземпляра "r" вызовите метод "Next", чтобы получить новое случайное число, и назначьте его переменной "next".

Можете себе представить, сколько времени нам потребуется, чтобы объяснить даже такой очень короткий фрагмент кода, как ваш пример, строка за строкой?

Нет, этого не произойдет. Если у вас есть конкретная проблема, то задайте вопрос о ней. Но сначала подумайте - хотите ли вы сесть на 45 минут и напечатать построчное описание без веской причины?


Рейтинг:
0

Patrice T

Цитата:
Кто-нибудь, пожалуйста, объясните эту программу строка за строкой...

Легко, эта программа не имеет смысла, ее даже не компилируют.

Вы не понимаете свой код.
Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

1.11 — отладка программы (пошаговое выполнение и останова) | выучить C++[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.