Re: Проходження графу в ширину.

Коментраі ніколи не писав... Скоріш за все вони тупі. Але вона сказала щось написати.

22

Re: Проходження графу в ширину.

чомуБвамНеСпробуватиCamelCaseВіменахФункційТаЗмінних

Подякували: leofun01, plusxx2

Re: Проходження графу в ширину.

Я не зрозумів що Ви написали

24

Re: Проходження графу в ширину.

Львівский сирник в мульти написав:

Я не зрозумів що Ви написали

CamelCase

Re: Проходження графу в ширину.

Весело запитав по чому банани відповіли гарна погода...

26

Re: Проходження графу в ширину.

Не заглиблюючися в алгоритм...

        sst = *searchind(main, num, minindex);
        
        
        while ((sst)) {
            index = find(main, num, (sst)->namest);
            
            if (matrix[i][index] != 66) {
                matrix[i][index] = sumway + (sst)->way;
                (sst) = (sst)->commonst;
            }
            else {
                (sst) = (sst)->commonst;
            }
        }

В if та else останні рядки однакові. Виносимо:

        sst = *searchind(main, num, minindex);        
        while ((sst)) {
            index = find(main, num, (sst)->namest);            
            if (matrix[i][index] != 66) {
                matrix[i][index] = sumway + (sst)->way;
            }
            else {
            }
            (sst) = (sst)->commonst;
        }

else не потрібен, як і дужки навколо sst.

        sst = *searchind(main, num, minindex);
        
        
        while ((sst)) {
            index = find(main, num, (sst)->namest);
            
            if (matrix[i][index] != 66) {
                matrix[i][index] = sumway + (sst)->way;
                (sst) = (sst)->commonst;
            }
            else {
                (sst) = (sst)->commonst;
            }
        }

В if та else останні рядки однакові. Виносимо і прибираємо зайві фігурні дужки:

        sst = *searchind(main, num, minindex);        
        while (sst) {
            index = find(main, num, sst->namest);            
            if (matrix[i][index] != 66)
                matrix[i][index] = sumway + sst->way;
            sst = sst->commonst;
        }

А це насправді for, тільки не до числа, а поки sst не nullptr:

        for(sst = *searchind(main, num, minindex); sst; sst = sst->commonst) {
            index = find(main, num, sst->namest);            
            if (matrix[i][index] != 66)
                matrix[i][index] = sumway + sst->way;
        }

Просто прибрав зайві рядки.

27

Re: Проходження графу в ширину.

Функція searchind - це ви перемудрили. Ні, функцію можна залишити, зі складними вказівниками часто так зручніше, але ж індекс не зберігається в масиві. І в результаті ви порівнюєте i з ind, коли вам точно відоме потрібне значення i.

station** searchind(station*** mainst, int num, int ind) { 
    station** mst = *mainst;
    return &mst[ind];
}

Єдина відмінність з вашою функцією - якщо ind>=num, ваша функція поверне сміття зі стеку, а моя - з пам'яті після mst. UB буде і там, і там.

28

Re: Проходження графу в ширину.

А ще search(mainst, num, st)  працює майже так само, як find(mainst, num, st->namest). Відмінність у способі передачі назви. Якщо в find передавати посилання на стрічку, то search буде непотрібним. І в getname можна викликати find (а ще краще - прибрати getname, явно вводити стрічку і передавати її в find).

Re: Проходження графу в ширину.

koala написав:

Функція searchind - це ви перемудрили. Ні, функцію можна залишити, зі складними вказівниками часто так зручніше, але ж індекс не зберігається в масиві. І в результаті ви порівнюєте i з ind, коли вам точно відоме потрібне значення i.

station** searchind(station*** mainst, int num, int ind) { 
    station** mst = *mainst;
    return &mst[ind];
}

Єдина відмінність з вашою функцією - якщо ind>=num, ваша функція поверне сміття зі стеку, а моя - з пам'яті після mst. UB буде і там, і там.

Тільки замітив. Не спорю, дурню написав. Просто довго сидів над завданням  і не замітив.