{"id":24974421,"url":"https://github.com/kgorze/dna-adjoint-graph-solver","last_synced_at":"2025-09-20T10:28:32.209Z","repository":{"id":274869229,"uuid":"924330534","full_name":"kGorze/DNA-Adjoint-Graph-Solver","owner":"kGorze","description":"Implementacja operacji i transformacji grafów w C++. Zawiera wykrywanie grafów liniowych, analizę grafów sprzężonych, wizualizację za pomocą Graphviz oraz konwersje między różnymi reprezentacjami grafów. Zawiera testy jednostkowe i dokumentację.","archived":false,"fork":false,"pushed_at":"2025-01-29T20:19:59.000Z","size":880,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-29T06:45:06.331Z","etag":null,"topics":["cpp","data-structures","graph-algorithms","graph-theory","graphs"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kGorze.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-29T20:09:00.000Z","updated_at":"2025-01-29T20:21:15.000Z","dependencies_parsed_at":"2025-01-29T21:33:45.978Z","dependency_job_id":null,"html_url":"https://github.com/kGorze/DNA-Adjoint-Graph-Solver","commit_stats":null,"previous_names":["kgorze/dna-adjoint-graph-solver"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kGorze/DNA-Adjoint-Graph-Solver","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kGorze%2FDNA-Adjoint-Graph-Solver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kGorze%2FDNA-Adjoint-Graph-Solver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kGorze%2FDNA-Adjoint-Graph-Solver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kGorze%2FDNA-Adjoint-Graph-Solver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kGorze","download_url":"https://codeload.github.com/kGorze/DNA-Adjoint-Graph-Solver/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kGorze%2FDNA-Adjoint-Graph-Solver/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276084278,"owners_count":25582506,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-20T02:00:10.207Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","data-structures","graph-algorithms","graph-theory","graphs"],"created_at":"2025-02-03T20:04:03.707Z","updated_at":"2025-09-20T10:28:32.168Z","avatar_url":"https://github.com/kGorze.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Projekt: Analiza i Transformacje Grafów\n\n## Spis treści\n1. [Wprowadzenie](#wprowadzenie)  \n2. [Struktura projektu](#struktura-projektu)  \n3. [Funkcjonalności i główne komponenty](#funkcjonalności-i-główne-komponenty)  \n4. [Opis plików źródłowych](#opis-plików-źródłowych)  \n5. [Kompilacja i uruchomienie](#kompilacja-i-uruchomienie)  \n6. [Sposób użycia](#sposób-użycia)  \n7. [Testy jednostkowe](#testy-jednostkowe)  \n8. [Uwagi końcowe](#uwagi-końcowe)  \n\n## Wprowadzenie\n\nNiniejszy projekt ilustruje implementację różnych operacji na grafach z użyciem języka C++ – od wczytywania i zapisywania grafów, po weryfikację, czy dany graf jest m.in. *grafem liniowym* (ang. *line graph*) czy *grafem sprzężonym* (ang. *adjoint graph*). Zapewnia też mechanizm tworzenia plików `.dot` do wizualizacji w narzędziu **Graphviz**. Zadanie 2 na labolatoria do prof. Kasprzak - Bioinformatyka 3 semestr, Algorytmy kombinatoryczne w bioinformatyce.\n\n**Cechy projektu**:\n- Wczytywanie grafu z pliku, zapisywanie w formatach tekstowym i `.dot`.\n- Wsparcie dla wizualizacji (wywołanie narzędzia `dot` do wygenerowania obrazu).\n- Detekcja pewnych cech strukturalnych (np. *isAdjointGraph*, *isLinearGraph*).\n- Transformacja grafu sprzężonego na jego oryginał (`transformToOriginalGraph`).\n- Zbiór testów jednostkowych sprawdzających poprawność operacji.\n\n## Struktura projektu\n\n```\n.\n├── include/\n│   ├── graph.h                // Deklaracja klasy Graph\n│   └── test_graph.h           // Deklaracja klasy TestGraph (testy)\n├── src/\n│   ├── graph.cpp              // Implementacja klasy Graph\n│   ├── main.cpp               // Funkcja main - uruchamia logikę programu\n│   ├── test_graph.cpp         // Implementacja testów jednostkowych\n│   └── ...\n└── CMakeLists.txt             // Plik konfiguracyjny CMake (opcjonalnie)\n```\n\n## Funkcjonalności i główne komponenty\n\n### 1. Wczytywanie i zapisywanie grafu\n- Metoda `readGraphFromFile(const std::string\u0026)` umożliwia odczytanie liczby wierzchołków i ich sąsiadów z pliku tekstowego.  \n- Metody `writeGraphToFile(...)` oraz `writeGraphToDotFile(...)` pozwalają zapisać graf w formie tekstowej bądź do pliku `.dot`.\n\n### 2. Wyświetlanie i wizualizacja\n- `displayGraph()` – wypisuje na konsolę listę sąsiedztwa.  \n- `visualizeGraph(dotFilename, outputImage)` – wywołuje zewnętrzny program `dot`, generując obraz PNG.\n\n### 3. Analiza strukturalna\n- `isAdjointGraph()` – sprawdza, czy dany graf może być grafem sprzężonym innego grafu.  \n- `isOneGraph()` – weryfikuje, czy wierzchołki nie powielają krawędzi (wskazuje tzw. 1-graf).  \n- `isLinearGraph()` – sprawdza, czy graf jest \"liniowy\" poprzez wykrywanie struktur zabronionych (metody `hasFirstStructure`, `hasSecondStructure`, `hasThirdStructure`).\n\n### 4. Transformacja\n- `transformToOriginalGraph()` – jeżeli graf okaże się być sprzężony, można uzyskać jego graf oryginalny.\n\n### 5. Testy\n- W pliku `test_graph.cpp` znajdują się testy jednostkowe, wywoływane przez `TestGraph::runAllTests()`.  \n- Obejmują między innymi:\n  - Poprawność wczytywania/zapisywania\n  - Weryfikację metod `isAdjointGraph`, `isOneGraph`, `isLinearGraph`  \n  - Sprawdzanie struktur zabronionych.\n\n## Opis plików źródłowych\n\n### 1. `graph.cpp` / `graph.h`\nKlasa **Graph** zawiera:\n- **Pola**:  \n  - `numVertices` – liczba wierzchołków.  \n  - `adjacencyList` – wektor wektorów (lista sąsiedztwa).\n- **Metody** (wybrane):  \n  - `readGraphFromFile(...)` – odczyt i budowa listy sąsiedztwa.  \n  - `writeGraphToFile(...)`, `writeGraphToDotFile(...)` – zapis grafu.  \n  - `visualizeGraph(...)` – wywołanie Graphviz do stworzenia obrazu.  \n  - `isAdjointGraph()`, `isOneGraph()`, `isLinearGraph()` – analiza cech.  \n  - `transformToOriginalGraph()` – tworzenie oryginalnego grafu z grafu sprzężonego.\n\n### 2. `main.cpp`\n- Główna funkcja programu:  \n  - Tworzy obiekt `Graph g`  \n  - Wczytuje graf z pliku `input.txt`  \n  - Wyświetla go, próbuje ustalić, czy jest *adjoint*, i ewentualnie przekształca go w oryginał.  \n  - Zapisuje wyniki do plików `output.txt`, `output_graph.dot`, `output_graph.png`.\n\n### 3. `test_graph.cpp` / `test_graph.h`\n- Klasa `TestGraph` zawiera zestaw **testów jednostkowych**:\n  - `testFileIO()`, `testSuccessors()`, `testIsAdjointGraph()`, `testIsOneGraph()`, `testLinearStructures()`, itd.  \n  - Metoda `runAllTests()` wywołuje je sekwencyjnie.  \n  - Plik generuje tymczasowe pliki testowe i porządkuje je po wykonaniu.\n\n## Kompilacja i uruchomienie\n\n1. **Kompilacja** (jeśli używamy CMake):  \n   ```bash\n   mkdir build\n   cd build\n   cmake ..\n   make\n   ```\n   Powstanie plik wykonywalny (np. `graph_app`).\n\n2. **Uruchomienie**:  \n   ```bash\n   ./graph_app\n   ```\n   lub inna nazwa binarki w zależności od `CMakeLists.txt`.\n\n3. **Wymagania**:\n   - Kompilator C++ (np. g++ z obsługą C++11 lub nowszego).  \n   - (Opcjonalnie) **Graphviz** (dla metody `visualizeGraph` – wywołanie `dot`).\n\n## Sposób użycia\n\n1. **Przygotowanie pliku wejściowego** (np. `input.txt`):\n   - Pierwsza linia: liczba wierzchołków, np. `4`.  \n   - Kolejne linie: `wierzchołek: lista_sąsiadów`, np.  \n     ```\n     1: 2 3\n     2: 1 3\n     3: 1 2 4\n     4: 3\n     ```\n\n2. **Uruchomienie programu**:  \n   - Program wczyta `input.txt`, wyświetli na konsoli graf, utworzy plik `.dot` i obraz `.png`.\n   - Ustali, czy graf jest sprzężony (`adjoint`), a jeżeli tak, przetransformuje do oryginalnego grafu i zapisze w `output.txt`.\n\n3. **Testy**:  \n   - Aby włączyć testy, ustaw w `main.cpp` wartość `run_tests = true`.  \n   - Skrypt testowy wygeneruje tymczasowe pliki i wywoła zestaw asercji.\n\n## Testy jednostkowe\n\n- W pliku `test_graph.cpp` znajdują się testy do weryfikacji każdej ważniejszej metody:  \n  - **I/O** plików: sprawdzanie, czy wczytanie i zapis dają oczekiwany wynik.  \n  - **Struktury**: testy `isAdjointGraph`, `isOneGraph`, `isLinearGraph`.  \n  - **Struktury zabronione**: `hasFirstStructure()`, `hasSecondStructure()`, `hasThirdStructure()`.  \n- Po zakończeniu testów pliki tymczasowe są usuwane (metoda `cleanup()`).\n\n## Uwagi końcowe\n\n- Projekt ten służy jako **przykład** implementacji różnorodnych operacji na grafach (line graph, adjacency checks, transformacje).  \n- W **katalogu** z wynikiem (`.dot`) można uruchomić np.:\n  ```bash\n  dot -Tpng input_graph.dot -o input_graph.png\n  ```\n  by wygenerować obraz. Metoda `visualizeGraph` robi to automatycznie, zakładając, że `dot` jest zainstalowany i dostępny w ścieżce systemowej.\n\n**Kontakt**:  \n- Autor: *Konrad Gorzelańczyk*\n- Data: 2025","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkgorze%2Fdna-adjoint-graph-solver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkgorze%2Fdna-adjoint-graph-solver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkgorze%2Fdna-adjoint-graph-solver/lists"}