/*** * 13. Kurier ma za zadanie zawieść towar do klientów w różnych lokalizacjach i powrócić do miejsca, z którego wyjechał. Kurier musi odwiedzić każdego klienta raz i tylko raz. Należy znaleźć zamkniętą najkrótszą drogę, która umożliwia odwiedzenie wszystkich klientów. W pliku wejściowym zapisane są długości dróg pomiędzy miastami. Drogi zapisane są w następujący sposób: ( - : ). Niektóre drogi nie są symetryczne, tzn. jest pewna różnica między drogą tam a z powrotem. Zapis ( -> : ), oznacza długość drogi jednokierunkowej od klienta C do klienta D. Poszczególne drogi są rozdzielone przecinkami. Nie jest podana liczba dróg. Jeżeli nie jest możliwe wyznaczenie drogi, program zgłasza odpowiedni komunikat. Przykładowy plik wejściowy: (1 - 2 : 4.5), (4 -> 3: 4.5), (4 - 2: 0.4) W pliku wynikowym należy zapisać drogę kuriera (kolejność odwiedzania klientów i długość drogi). Program uruchamiany jest z linii poleceń z potrzebnymi przełącznikami, natomiast uruchomienie programu bez parametrów powoduje wypisanie krótkiej instrukcji **/ #include #include #include #include cxxopts::Options options("Kurier", "Program rozwiązujący problem kuriera"); char helpText[] = "To jest program rozwiązujący problem kuriera. Użycie: kurier -i [plik wejściowy] -o [plik wyjściowy]"; using namespace std; /** * @brief Funkcja parsująca dane wejściowe. * * @details Funkcja pobiera dane wejściowe z przekazanej ścieżki do pliku. Plik zawiera długości dróg pomiędzy poszczególnymi miastami w formacie ( - : ). * * @param inputFile Ścieżka do pliku wejściowego * * @return iterator pliku */ int parseInput(char* inputFile){ fopen(inputFile, "r"); return 0; } /** * @brief Główna funkcja. * */ int main (int argc, char *argv[]) { options.add_options() ("d,debug", "Włącza tryb debugowania") // a bool parameter ("h,help", "Pokazuje pomoc") // a bool parameter ("i,input", "Nazwa pliku wejściowego", cxxopts::value()) ("o,output", "Nazwa pliku wyjściowego", cxxopts::value()) ("v,verbose", "Verbose output", cxxopts::value()->default_value("false")); auto result = options.parse(argc, argv); if (result.count("help") || argc == 1){ std::cout << options.help() << std::endl; exit(0); } bool debug = result["debug"].as(); std::string plikWejsciowy; if (result.count("input")) plikWejsciowy = result["input"].as(); if (debug == true) { for (int i = 0; i < argc; i++) { std::cout << argv[i] << std::endl; } } return 0; }