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)