Część I:
Wygenerować plik w formacie GXL zawierający graf składający się ze stacji, które są losowe rozmieszczone wewnątrz miasta, w którym stacje są połączone krawędzią wtedy, gdy ich zasięg się pokrywa.
Wejście:
- Współrzędne środka koła (miasta)
- Promień koła (miasta)
- Liczba stacji
- Zasięg (promień) stacji
Wyjście:
Uzyskany graf w formacie GXL.
Część II
Należy wczytać wygenerowany wcześniej graf oraz zapotrzebowanie na częstotliwości dla każdej stacji. Stacje, których zasięg się pokrywa nie mogą uzyskać tych samych częstotliwości. Program powinien znaleźć jak najmniejszą liczbę różnych częstotliwości potrzebnych aby stacje mogły funkcjonować.
Przykład:
Mając prosty graf [1]->[2]->[3] i wiedząc, że stacja 1 potrzebuje 3 częstotliwości, stacja 2 potrzebuje 4 a stacja ostatnia 5. Wówczas powinniśmy przydzielić częstotliwości np. tak:
- Stacja nr 1: 4,5,6
- Stacja nr 2: 0,1,2,3
- Stacja nr 3: 4,5,6,7,8
Wejście:
- Plik GXL
- Zapotrzebowanie na częstotliwości dla każdej stacji
Wyjście:
- Liczba przydzielonych różnych częstotliwości
Problem postanowiłem rozwiązać w Haskellu z uwagi na możliwość operacji na listach nieskończonych co w tym przypadku bardzo ułatwia znajdowanie częstotliwości. W części II wykorzystałem algorytm SLF. Oczywiście problem jest NP zupełny więc nie ma idealnego algorytmu, który by przydzielił zawsze najmniejszą możliwą do uzyskania liczbę częstotliwości dla każdego przypadku.
Część I: gxl.hs
Część II: multicolor.hs
Plik do obsługi formatu GXL (wymagany aby skompilować poprzednie 2 pliki): gxl_dtd.hs
Witam,
OdpowiedzUsuńa w czym otworzyć taki graf wygenerowany do formatu *.gxl?
Nie znam żadnego programu wyświetlającego bezpośrednio pliki .gxl. Ale pod linuxem można użyć programu dot z pakietu graphviz. Tyle, że najpierw trzeba skonwertować plik .gxl to pliku .dot za pomocą polecenia gxl2dot. Później wystarczy wykonać dot -Tps plik.dot -o plik.ps
OdpowiedzUsuńW ten sposób otrzymasz plik .ps, który możesz wyświetlić praktycznie każdym programem do wyświetlania pdfów (np. evince).
Można jakoś przerobić kod w haskellu żeby działał w c# ?
OdpowiedzUsuńCzy można to skompilować ? I czym ?
OdpowiedzUsuńPrzerobić się da jak każdy program. W sieci jest całe mnóstwo informacji o tym jak zacząć z Haskellem i czym go kompilować czy też interpretować. Jeżeli potrzebujecie tego algorytmu by zaliczyć jakieś ćwiczenie czy cokolwiek to warto przynajmniej poszukać rozwiązania w języku, który się chociaż kojarzy...
OdpowiedzUsuń