Zauważ, że to pytanie dotyczy przede wszystkim struktur danych
Wprowadzenie
Bacefook chce, aby ludzie byli bardziej przyjaźni! W związku z tym wdrażają nowy system sugerowania znajomych! Twoim zadaniem jest pomóc Bacefook we wdrożeniu nowego systemu sugerowania.
Dane techniczne:
Twój program musi być REPL (pętla odczytu eval-print) wspieranie 3 rodzaje polecenie: FRIEND
, SUGGEST
i KNOW
.
FRIEND X Y
- Określa, że X
i Y
są przyjaciółmi w sieci społecznej.
Jeśli X jest przyjacielem Y, to Y jest przyjacielem X
Może, ale nie musi mieć danych wyjściowych
X zawsze przyjaźni się z X
KNOW X Y
- Wypisuje prawdę, jeśli X i Y są przyjaciółmi, w przeciwnym razie fałsz
KNOW X X
zawsze wyświetli prawdziwą wartość
SUGGEST X Y
- Wypisuje prawdę, jeśli X i Y powinny być przyjaciółmi, w przeciwnym razie fałsz. X i Y powinny być przyjaciółmi, jeśli:
X i Y nie są przyjaciółmi
X i Y mają co najmniej 1 wspólnego znajomego
Masz prawo do wymiany FRIEND
, SUGGEST
oraz KNOW
z własnych strun, ale trzeba wspomnieć, co ciąg wymianie każdą komendę.
Twój program może przyjmować dane wejściowe / wyjściowe w dowolny pożądany sposób, o ile można dość łatwo rozpoznać, jak to działa.
Liczba osób w sieci społecznościowej N
wynosi od 1 do 100 000, ale może istnieć dowolna liczba „linków do znajomych” (krawędzi).
Jeśli jeszcze tego nie zauważyłeś, jest to problem z wyszukiwaniem wykresów. (Prawdopodobnie) najłatwiejszą (i prawdopodobnie najszybszą) strukturą danych, w której można to zaimplementować, byłaby macierz przylegania.
Przypadki testowe
FRIEND A B
FRIEND A C
FRIEND B D
SUGGEST A B -> Falsy, as they are friends
SUGGEST A D -> Truthy, as they share B as a common friend
SUGGEST C D -> Falsy, they do not share a common friend
KNOW D B -> Truthy, they are friends
KNOW B C -> Falsy, not friends
=============
FRIEND Tom Tim
KNOW Tom Tim -> Truthy
KNOW Tim Tom -> Truthy
KNOW Tom Kit -> Falsy
=============
KNOW Tim Kit -> Falsy
FRIEND Tim Tom
KNOW Tim Kit -> Falsy
FRIEND Tom Kit
SUGGEST Tim Kit -> Truthy
=============
FRIEND X Y
SUGGEST X Y -> Falsy since X is friends with X
Oto kilka innych przypadków testowych w formie obrazu
Warunek wygranej
To jest golf golfowy , wygrywa najkrótszy kod!
SUGGEST UK EU
.
{A, B, C, D}
?