Jeśli chodzi o Okrągły stół, to trzeba było pilnować kto obok kogo usiadł. Jak?
Zamiast skupiać się na całej liście i wciskać ludzi pomiędzy siebie pamiętajmy listę osób, która usiadła za określoną osobą.
Przykład:
[Ania]
[Andrzej]
Między nimi siadają dwie osoby Tomasz i Kuba:
[Ania] -> Tomasz, Kuba
[Andrzej]
[Tomasz]
[Kuba]
Przychodzą następni i siadają za Tomaszem (nie interesujemy się drugą osobą, między którą usiadły nowe osoby. Nie ma dla nas znaczenia). Aktualizujemy tylko listę Tomasza:
[Ania] -> Tomasz, Kuba
[Andrzej]
[Tomasz] -> Iwona, Wiktor
[Kuba]
[Iwona]
[Wiktor]
Itd.
Problem pojawia się, jak nowe osoby usiądą obok osoby, która już ma kogoś na liście. Np. dwie nowe osoby (Iza, Ola) siadają obok Tomasza:
[Ania] -> Tomasz, Kuba
[Andrzej]
[Tomasz] -> Iza, Ola, Iwona, Wiktor
[Kuba]
[Iwona]
[Wiktor]
Trzeba w odpowiedniej kolejności dodawać nowe osoby na listę.
Ja użyłem std::deque (C++) jako listę osób, ale pewnie da się to załatwić prostszym vectorem.
Na koniec jak już wszyscy usiądą, to rekurencyjnie wyświetlam wszystkie osoby:
Wyświetl imię osoby -> wyświetl wszystkich, którzy siedzą obok niej.
Pamiętając, że muszę sam wyświetlić pierwsze 4, które pojawiły się w treści zadania.