Wymagania ogólne Wszystkie tematy miniprojektów dotyczą

Transkrypt

Wymagania ogólne Wszystkie tematy miniprojektów dotyczą
Wymagania ogólne
Wszystkie tematy miniprojektów dotyczą realizacji programów wykonujących algorytmy grafowe. Informacje na temat tych algorytmów można uzyskać np. z literatury podanej do wykładu z przedmiotu
Podstawy Programowania 2. Każdy program musi reprezentować graf za pomocą listy sąsiedztwa zaimplementowanej jako lista list. Pamięć przydzieloną na tą strukturę program powinien zwolnić przed
zakończeniem działania. Listę tę należy utworzyć na podstawie zawartości pliku tekstowego. Pierwszy
wiersz tego pliku zawiera liczbę wierzchołków grafu. Drugi wiersz zawiera informację czy graf jest skierowany (1), czy nieskierowany (0). Kolejne wiersze zawierają pary wierzchołków, rozdzielone spacjami,
miedzy którymi istnieje krawędź. Numeracja wierzchołków rozpoczyna się zawsze od liczby 0 (zero).
Przykład grafu i pliku go opisującego znajduje się na rysunku 1. Przed wykonaniem danego algorytmu
program powinien wyświetlić listę sąsiedztwa na ekranie. Nazwę pliku z opisem grafu należy przekazać do
programu jako argument jego wywołania. Wszystkie inne informacje, konieczne do wykonania algorytmu powinny być przekazywane przez użytkownika w trakcie działania programu za pomocą klawiatury.
Program powinien być zabezpieczony przed błędami w danych wprowadzanych przez użytkownika, bądź
ukrytymi w pliku. Liczby w nawiasach okrągłych, umieszczone na końcach opisów zadań, to numery
indeksów osób, którym przyporządkowano dane zadanie.
0
1
2
3
4
0
0
1
3
2
0
1
3
2
0
3
Rysunek 1: Przykładowy graf, wraz z treścią pliku opisu
Tematy mniprojektów
• Kolorowanie grafu - problem polega na takim przyporządkowaniu kolorów wierzchołkom grafu, aby
wierzchołki połączone krawędziami miały różne kolory, przy użyciu tylko dwóch kolorów. Można
go rozwiązać wykorzystując algorytm bfs. Program powinien wyświetlać informację o kolorach
poszczególnych wierzchołków. W przypadku grafów, których nie można w ten sposób pokolorować
program powinien wyświetlać odpowiednią informację. (69944)
• Cykl Eulera - program powinien wykrywać istnienie, bądź nie, cyklu Eulera w grafie nieskierowanym
i wypisywać odpowiednią informację na ekranie. (69938)
• Przeszukiwanie grafu w głąb - program powinien wyświetlić na ekranie wierzchołki grafu w takiej
kolejności, w jakiej są one odwiedzane z użyciem algorytmu przeszukiwania w głąb (ang. Deep First
Search - dfs). Wierzchołek startowy powinien ustalać użytkownik przed wykonaniem algorytmu
przeszukiwania. (70060)
• Przeszukiwanie grafu wszerz - program powinien wyświetlić na ekranie wierzchołki grafu w takiej
kolejności, w jakiej są one odwiedzane z użyciem algorytmu przeszukiwania wszerz (ang. Breadth
First Search - bfs). Wierzchołek startowy powinien ustalać użytkownik przed wykonaniem algorytmu przeszukiwania. (70115)
• Sortowanie topologiczne - operacja ta polega na takim uporządkowaniu wierzchołków grafu skierowanego, żeby wszystkie krawędzie grafu biegły od strony lewej do prawej. Problem ten można
rozwiązać dodając pewną informację do listy sąsiedztwa i przerabiając odpowiednio algorytm dfs
opisany wyżej. Program powinien wykrywać grafy, których nie da się uporządkować w opisany
sposób. (65684)