Przetestuj działanie programu dla następującej listy sąsiedztwa:
Linia 1. lista podkreślnik sasiedztwa znak równości otwórz nawias kwadratowy.
Linia 2. otwórz nawias kwadratowy 1 przecinek 2 przecinek 3 przecinek 4 zamknij nawias kwadratowy przecinek.
Linia 3. otwórz nawias kwadratowy 0 przecinek 2 przecinek 3 przecinek 4 zamknij nawias kwadratowy przecinek.
Linia 4. otwórz nawias kwadratowy 0 przecinek 1 przecinek 4 zamknij nawias kwadratowy przecinek.
Linia 5. otwórz nawias kwadratowy 0 przecinek 1 przecinek 4 zamknij nawias kwadratowy przecinek.
Linia 6. otwórz nawias kwadratowy 0 przecinek 1 przecinek 2 przecinek 3 zamknij nawias kwadratowy.
Linia 7. zamknij nawias kwadratowy.
R1SD71218siIg
Przykładowe rozwiązanie zadania:
Linia 1. n znak równości 5.
Linia 2. E znak równości 10.
Linia 4. lista podkreślnik sasiedztwa znak równości otwórz nawias kwadratowy.
Linia 5. otwórz nawias kwadratowy 1 przecinek 2 przecinek 3 przecinek 4 zamknij nawias kwadratowy przecinek.
Linia 6. otwórz nawias kwadratowy 0 przecinek 2 przecinek 3 przecinek 4 zamknij nawias kwadratowy przecinek.
Linia 7. otwórz nawias kwadratowy 0 przecinek 1 przecinek 4 zamknij nawias kwadratowy przecinek.
Linia 8. otwórz nawias kwadratowy 0 przecinek 1 przecinek 4 zamknij nawias kwadratowy przecinek.
Linia 9. otwórz nawias kwadratowy 0 przecinek 1 przecinek 2 przecinek 3 zamknij nawias kwadratowy.
Linia 10. zamknij nawias kwadratowy.
Linia 12. macierz podkreślnik incydencji znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy 0 for podkreślnik in range otwórz nawias okrągły E zamknij nawias okrągły zamknij nawias kwadratowy for podkreślnik in range otwórz nawias okrągły n zamknij nawias okrągły zamknij nawias kwadratowy.
Linia 14. m znak równości 0.
Linia 16. def przeksztalc otwórz nawias okrągły macierz podkreślnik incydencji zamknij nawias okrągły dwukropek.
Linia 17. global m.
Linia 18. for i in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek.
Linia 19. for j in lista podkreślnik sasiedztwa otwórz nawias kwadratowy i zamknij nawias kwadratowy dwukropek.
Linia 20. if i zamknij nawias ostrokątny j dwukropek.
Linia 21. continue.
Linia 23. macierz podkreślnik incydencji otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy m zamknij nawias kwadratowy znak równości 1.
Linia 24. macierz podkreślnik incydencji otwórz nawias kwadratowy j zamknij nawias kwadratowy otwórz nawias kwadratowy m zamknij nawias kwadratowy znak równości 1.
Linia 25. m plus znak równości 1.
Linia 27. def wypisz otwórz nawias okrągły macierz podkreślnik incydencji zamknij nawias okrągły dwukropek.
Linia 28. for i in range otwórz nawias okrągły n zamknij nawias okrągły dwukropek.
Linia 29. for j in range otwórz nawias okrągły m zamknij nawias okrągły dwukropek.
Linia 30. print otwórz nawias okrągły macierz podkreślnik incydencji otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy przecinek end znak równości cudzysłów cudzysłów zamknij nawias okrągły.
Linia 31. print otwórz nawias okrągły zamknij nawias okrągły.
Linia 33. przeksztalc otwórz nawias okrągły macierz podkreślnik incydencji zamknij nawias okrągły.
Linia 34. wypisz otwórz nawias okrągły macierz podkreślnik incydencji zamknij nawias okrągły.
31
Ćwiczenie 9
Macierze sąsiedztwa dobrze sprawdzają się w reprezentacji grafów ważonych. Jeśli wagi krawędzi są różne od 0, wówczas tam, gdzie normalnie wstawilibyśmy 1, wpiszemy wagę krawędzi. Gdyby jednak graf zawierał wagę 0, to za brak połączenia uznajemy pewną liczbę waga rożną od wszystkich wag w grafie.
Podobnie jak macierz sąsiedztwa, także lista sąsiedztwa może służyć do prezentacji grafów ważonych. W takim wypadku wyrazy na liście sąsiadów danego wierzchołka będą parą uporządkowaną dwóch elementów: indeksu sąsiada oraz wagi krawędzi łączącej sąsiada z wierzchołkiem. Przykładowo: jeśli waga krawędzi ij wynosi 5, wówczas na liście listaSasiedztwa[i] powinna znaleźć się para [j, 5]. Graf domyślnie jest nieskierowany, więc analogicznie lista lista_sasiedztwa[j] zawiera parę [i, 5].
R1b8UlEnz7IDA
Zdefiniowano listę krawędzi w postaci listy list składających się z trzech elementów, gdzie pierwszy i ostatni element każdej listy to indeksy sąsiednich wierzchołków, a element środkowy jest wagą krawędzi łączącej te wierzchołki. Twoim zadaniem jest zdefiniowanie następujących funkcji:
Funkcja przeksztalc_krawedzie(krawedzie), która przekształci listę krawedzie w macierz sąsiedztwa macierz_sasiedztwa w wersji ważonej.
Funkcja przeksztalc_macierz(macierz_sasiedztwa), która na podstawie macierzy sąsiedztwa macierz_sasiedztwa wstawi do listy sąsiedztwa lista_sasiedztwa sąsiadów każdego wierzchołka i.