Re: Проходження графу в ширину.
Коментраі ніколи не писав... Скоріш за все вони тупі. Але вона сказала щось написати.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Проходження графу в ширину.
Для відправлення відповіді ви повинні увійти або зареєструватися
Коментраі ніколи не писав... Скоріш за все вони тупі. Але вона сказала щось написати.
Я не зрозумів що Ви написали
Весело запитав по чому банани відповіли гарна погода...
Не заглиблюючися в алгоритм...
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;
}
Просто прибрав зайві рядки.
Функція searchind - це ви перемудрили. Ні, функцію можна залишити, зі складними вказівниками часто так зручніше, але ж індекс не зберігається в масиві. І в результаті ви порівнюєте i з ind, коли вам точно відоме потрібне значення i.
station** searchind(station*** mainst, int num, int ind) {
station** mst = *mainst;
return &mst[ind];
}
Єдина відмінність з вашою функцією - якщо ind>=num, ваша функція поверне сміття зі стеку, а моя - з пам'яті після mst. UB буде і там, і там.
А ще search(mainst, num, st) працює майже так само, як find(mainst, num, st->namest). Відмінність у способі передачі назви. Якщо в find передавати посилання на стрічку, то search буде непотрібним. І в getname можна викликати find (а ще краще - прибрати getname, явно вводити стрічку і передавати її в find).
Функція searchind - це ви перемудрили. Ні, функцію можна залишити, зі складними вказівниками часто так зручніше, але ж індекс не зберігається в масиві. І в результаті ви порівнюєте i з ind, коли вам точно відоме потрібне значення i.
station** searchind(station*** mainst, int num, int ind) { station** mst = *mainst; return &mst[ind]; }
Єдина відмінність з вашою функцією - якщо ind>=num, ваша функція поверне сміття зі стеку, а моя - з пам'яті після mst. UB буде і там, і там.
Тільки замітив. Не спорю, дурню написав. Просто довго сидів над завданням і не замітив.
Для відправлення відповіді ви повинні увійти або зареєструватися