• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Nie rozumiem pewnej linijki własnego kodu

Object Storage Arubacloud
0 głosów
270 wizyt
pytanie zadane 18 stycznia 2023 w C i C++ przez polandonion Mądrala (7,040 p.)

Siema, niedawno zakładałem wątek odnośnie tego zadania, lecz teraz przychodzę z czymś innym. Zacząłem tak sobie na kartce rysować jakieś proste przykłady, żeby może spostrzc ewentualne niedorobienia w algorytmie, lecz jak się później okazało, że myśl algorytmu była dobra, tylko jak to bywa w życiu - wykonanie do bani. Wracając do tematu, po kilku minutach tak bez żadnego powodu wpadłem na pewien pomysł i spróbowałem go zaimplementować. Jak się później okazało, to rozwiązało wszystkie błędy i teraz program przechodzi na 100%. Zastanawia mnie tylko to, czemu to działa, wsensie czemu bez tego program dawał mi tylko 80%(, gdzie 20% uciekało, ze względu na błędną odp)?

Jeśli chodzi o tą zmianę w kodzie, to 64. linia z takiej:

if (!con)

stała się taką:

if (!con or vis.size() != nei.size())

Zadanie: https://www.docdroid.net/ieoxJSw/wzr-pdf

Kod: https://ideone.com/vdP0Bj

komentarz 19 stycznia 2023 przez Oscar Nałogowiec (29,290 p.)
Porównanie (!= też) ma wyższy priorytet niż operatory logiczne.

1 odpowiedź

0 głosów
odpowiedź 19 stycznia 2023 przez overcq Pasjonat (21,650 p.)
edycja 20 stycznia 2023 przez overcq

Analiza tego kodu ze względu na sortowanie dzielone pomiędzy pierwszą funkcją wołającą rekurencję, rekurencją i zmiennymi globalnymi jest trudna.

Ale można zobaczyć od końca programu, kiedy vis.size() != nei.size().

vis[imie] jest ustawiane za każdym wejściem do topoSort, a to jest dokonywane dla wszystkich nei[imie] w pętli w main. Więc coś musi się dziać z tymi imieniami, które nie są wymienione jako pierwsze. Czyli wiadomo już, że vis.size() >= nei.size(). Może być więcej imion wymienionych z prawej strony, które są przetwarzane przez rekurencyjne wywołania topoSort.

Ale jakie to ma znaczenie w tym algorytmie, nie wiem, ponieważ nie rozważam algorytmu sortowania. Przypuszczam, że może chodzić o to, iż pewne imiona mogą nie mieć ustalonej nadrzędności a istnieć w sta. Ponieważ później w conFn sprawdzasz tylko obecność duplikatów, a nie braków. Te komentarze o grafie są mylące, ponieważ tam nie ma żadnego grafu, są inne struktury.

Podobne pytania

–1 głos
1 odpowiedź 265 wizyt
+1 głos
1 odpowiedź 173 wizyt
pytanie zadane 7 czerwca 2023 w C i C++ przez Szyszka Gaduła (3,490 p.)
0 głosów
1 odpowiedź 335 wizyt

92,556 zapytań

141,404 odpowiedzi

319,561 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...