// Ohj-1151 Ohjelmointi 2e // Palautustehtävä 2: Verkostomarkkinointi // 205441 Petteri Aimonen #include #include #include #include #include #include #include struct Henkilo { std::vector varvatyt; }; // Lukee verkoston henkilot-mappiin void luetiedosto(std::map &henkilot, std::istream &tiedosto) { while (tiedosto.good()) { int varvaaja = 0; int varvatty = 0; tiedosto >> varvaaja; tiedosto >> varvatty; if (!tiedosto.good()) { // EOF kesken lukemisen break; } // Lisätään värvätty listaan henkilot[varvaaja].varvatyt.push_back(varvatty); } } // Tulostaa puun alkaen alkuid:stä void tulostapuu(std::map &henkilot, int alkuid, std::string sisennys = std::string("")) { Henkilo &henkilo = henkilot[alkuid]; unsigned int i = 0; std::cout << sisennys << alkuid << std::endl; for (i = 0; i < henkilo.varvatyt.size(); i++) { tulostapuu(henkilot, henkilo.varvatyt.at(i), sisennys + " "); } } // Muuttaa merkkijonon kokonaisluvuksi int strtoi(std::string str) { std::istringstream stream(str); int tulos = 0; stream >> tulos; return tulos; } // Pääohjelma int main(int argc, char *argv[]) { if (argc != 3) { std::cout << "Virheelliset komentoriviparametrit." << std::endl; return EXIT_FAILURE; } std::ifstream tiedosto(argv[1]); if (!tiedosto.good()) { std::cout << "Tiedostoa " << argv[1] << " ei voida lukea."; std::cout << std::endl; return EXIT_FAILURE; } std::map henkilot; luetiedosto(henkilot, tiedosto); tiedosto.close(); tulostapuu(henkilot, strtoi(argv[2])); return EXIT_SUCCESS; }