• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
307 wizyt
pytanie zadane 18 stycznia 2023 w C i C++ przez polandonion Dyskutant (7,560 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,340 p.)
Porównanie (!= też) ma wyższy priorytet niż operatory logiczne.

1 odpowiedź

0 głosów
odpowiedź 19 stycznia 2023 przez overcq Pasjonat (22,200 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ź 365 wizyt
+1 głos
1 odpowiedź 416 wizyt
pytanie zadane 7 czerwca 2023 w C i C++ przez Szyszka Gaduła (3,510 p.)
0 głosów
1 odpowiedź 473 wizyt

93,175 zapytań

142,185 odpowiedzi

321,977 komentarzy

62,506 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1401p. - dia-Chann
  2. 1380p. - Łukasz Piwowar
  3. 1372p. - CC PL
  4. 1370p. - Łukasz Eckert
  5. 1351p. - Tomasz Bielak
  6. 1312p. - Łukasz Siedlecki
  7. 1302p. - rucin93
  8. 1217p. - Michal Drewniak
  9. 1181p. - rafalszastok
  10. 1164p. - Adrian Wieprzkowicz
  11. 1155p. - Piotr Aleksandrowicz
  12. 1149p. - Michał Telesz
  13. 1124p. - ssynowiec
  14. 1101p. - Dominik Łempicki (kapitan)
  15. 1087p. - Marcin Putra
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...